文件加密解决方案底层库详细说明

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件加密解决方案底层库详细说明

目录

一、概要设计 (1)

二、详细设计 (2)

(一)文件读入模块 (2)

(二)加密模块 (3)

(三)解密模块 (3)

(四)保存目标文件模块 (3)

(五)主处理函数 (4)

三、文件格式 (4)

(一)文件格式说明 (4)

(二)文件格式详细定义 (5)

四、功能实现 (6)

(一)命令行 (6)

1、Linux命令行 (7)

2、Windows命令行 (8)

(二)库 (9)

(三)接口 (9)

1、通用C接口 (9)

2、Android JNI接口 (10)

3、Lua接口 (11)

4、iOS接口 (11)

一、概要设计

加密方与解密方共享同一个密钥Key。因此加密方与解密方的角色是对等的。

基于对称加密体制,共支持两种算法可以选择,AES256与SM4。

子功能设计

二、详细设计

(一)文件读入模块

读入明文模块与读入密文模块,合并成一个模块,即“读入源文件”模块。操作都是一样的,都是将用户指定的磁盘文件——不管是密文还是明文的,读入到内存中去。

读入源文件的函数定义如下:

int openSrcFile(char **buffer)

{

FILE *myfile_src; /*源文件指针*/

char filename[20]; /*文件名数组*/

long file_size; /*记录文件的长度*/

printf("Please input the path and filename of the file you want to process\n");

scanf("%s",filename);

if(!(myfile_src = fopen(filename,"rb")))

{

printf("ERROR!");

}

fseek(myfile_src,0,SEEK_END);

file_size = ftell(myfile_src);

fseek(myfile_src,0,SEEK_SET);

*buffer = (char *)malloc(file_size);

fread(*buffer,1,file_size,myfile_src); /*读入文件*/

fclose(myfile_src);

return file_size;

(二)加密模块

文件加密函数如下

void encryption(char buffer[],int file_size,int key)

{

int i;

for( i = 0; i < file_size; i++)

buffer[i] = buffer[i] + key; /* M=2*(P+key) */

}

(三)解密模块

解密函数如下

void decryption(char buffer[],int file_size,int key)

{

int i;

for( i = 0; i < file_size; i++)

buffer[i] = buffer[i] - key;

}

(四)保存目标文件模块

将保存密文模块与保密明文模块,合并成一个模块,即保存目标文件模块。因为它们的操作是一样的。

void saveDstFile(char *buffer,long file_size)

{

FILE *myfile_dst; /*源文件指针*/

char filename[20]; /*文件名数组*/

printf("Please input the path and filename of the file you have processed\n");

scanf("%s",filename);

if(!(myfile_dst = fopen(filename,"wb")))

{

printf("ERROR!");

}

fwrite(buffer,1,file_size,myfile_dst);

printf("OK");

fclose(myfile_dst);

}

(五)主处理函数

主函数

最后就是主函数。

void Process(int a)

{

FILE *myfile_dst;

char * buffer;

int key;

long file_size; /*记录文件的长度*/

file_size = openSrcFile(&buffer); /*读入源文件*/

printf("Please input the key (a integer) for encryption or decryption\n");

scanf("%d",&key); /*用户输入密钥*/

if(a == 0)

{

/*加密状态*/

encryption(buffer,file_size,key);

}

else

{

/*解密状态*/

decryption(buffer,file_size,key);

}

saveDstFile(buffer,file_size);

}

三、文件格式

(一)文件格式说明

字段1:前面添加字节,字节数8(文件类型)

字段2:前面添加字节,字段2(加密密码)

元数据:

前面添加字节,字段2(创建作者)

前面添加字节,字段2(创建时间)

前面添加字节,字段2(签名字段可选)32位,MD5

正文

相关文档
最新文档