首页 > 编程语言 > 详细

C语言文件加密

时间:2020-03-10 23:15:56      阅读:57      评论:0      收藏:0      [点我收藏+]
1.代码
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "time.h"
#define uint8_t unsigned char 
#define uint16_t unsigned short int
#define uint32_t unsigned int
#define L_MOVE(c,n)         ((c>>(8-n)) | (c<<n))     
#define R_MOVE(c,n)         ((c<<(8-n)) | (c>>n))
#define ROW_SIZE        128


void Get_Pk(void);
uint8_t Get_File_Config(void);


uint8_t FILE_PK[32]={0};
uint8_t File1_Way[128]={0};
uint8_t File2_Way[128]={0};

void main(void)
{
    uint8_t Buf[ROW_SIZE+1]={0};
    uint8_t i=0,n=0;
    uint32_t File_Size=0;

    FILE *Fp1;
    FILE *Fp2;
//    Get_Pk();

   if(Get_File_Config()==0) 
   {
       printf("配置文件错误!\n\t提示:main.txt必须与main.exe在统一文件夹下\n"); 
       return ;
   }
    Fp1=fopen(File1_Way,"rb");
    Fp2=fopen(File2_Way,"wb");
    if(Fp1==NULL)
    {
        printf("文件1打开失败!\n\t提示:请假查该路径下文件是否存在\n");
        return ;
    }
    if(Fp2==NULL)
    {
        printf("文件2打开/创建失败!\n");
        return ;
    }
    while(1)
    {
        n = fread(Buf,1,ROW_SIZE,Fp1);
        if(n==0)
            break;
        for(i=0;i<n;i++)
            Buf[i] = L_MOVE(Buf[i],FILE_PK[i%32]);
        n = fwrite(Buf,1,n,Fp2);
        memset(Buf,0,sizeof(Buf));
        File_Size = File_Size +n;
    }
    printf("本次加密文件大小:%d  Byte\n\t%.2f  KB\n",File_Size,(float)(File_Size)/1024);
    fclose(Fp1);
    fclose(Fp2);
    printf("请输入随意字符结束!\n");
    getch();  
}

/*  生成32位随机数作为密码  */
void Get_Pk(void)
{
    uint8_t i=0;
    srand(time(NULL));
    for(i=0;i<32;i++)
        printf("%d,",rand()%8);
}

/*  获取配置信息  */
uint8_t Get_File_Config(void)           
{
    FILE *Fg;
    uint8_t i,j=0,str=0;
    uint8_t Row_Val[ROW_SIZE+1];
    Fg = fopen(".\\main.txt","r");
    if(Fg == NULL)
        return 0;
    while(fgets(Row_Val,ROW_SIZE,Fg)!=NULL)
    {
        for(i=0;i<ROW_SIZE;i++)
        {
            if(Row_Val[i] == ‘"‘)
            {
                str++;
                j=0;
                continue;
            }
            if(str == 1)
                FILE_PK[j++]=Row_Val[i] - 0x30;
            if(str == 3)
                File1_Way[j++]=Row_Val[i];
            if(str == 5)
                File2_Way[j++]=Row_Val[i];
        }
        memset(Row_Val,0,sizeof(Row_Val));
    }
    fclose(Fg);
    return 1;
}
//////////////////////////////////////////////////////
在main.exe同一文件夹下新建一个main.txt.

File_Pk="30754130732567546417513236040345";
File1=".\File1.bin";
File2=".\File3.bin";

&/File_Pk:32位密钥,每一位的范围0~7;
&/File1:源文件路径;
&/File2:加密后文件路径;

File_Pk不能超过32位,File1,File2不能超过128位,超过会造成数组溢出。

2.函数介绍
fopen
技术分享图片

fwrite

 技术分享图片

 

 fread

技术分享图片

 

 

 fgets

技术分享图片

 

 3.运行效果

 

技术分享图片

 

 技术分享图片

 

 

 

C语言文件加密

原文:https://www.cnblogs.com/star-water/p/12459565.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!