基本加密解密
对于位运算来说,由于两次异或运算可以将值还原这个特性,所以经常使用异或进行加密解密运算,如下:
0 ^ 0 = 0 0 ^ 0 = 0
1 ^ 0 = 1 1 ^ 0 = 1
0 ^ 1 = 1 1 ^ 1 = 0
1 ^ 1 = 0 0 ^ 1 = 1
根据上面结果无论两个char还是两个int或者别的类型,甚至两个不同类型、不同长度的数据两次异或后都可以还原,这就为加密解密提供了理论保障。密码可以是一个数值,只要将需要加密的内容的每个字节与这个数值异或即可,但采用字符串作为密码更常用,因为字符串可以很长不受大小限制,将需要加密的内容与字符串中的每个字符循环异或即可。对于文件加密来说通常使用二进制加密,因为二进制可以加密任何类型的文件,将二进制文件中的每个字节与密码中的字符循环加密就得到一个新的文件,我们也想将密码记录到加密的文件中,这样解密时就可以比对密码,使得密码输入错误时可以拒绝解密,但将密码写入到文件中会有风险,如果用文本查看器打开二进制文件很容易捕捉到密码的ascii码,因此密码本身也需要加密后写入文件。解密时先要读取加密后的密码,然后将密码解密,正确才开始解密文件内容。我们需要一个可执行文件,通过这个文件的参数进行加密解密工作,代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void encfile(FILE* fp1, FILE* fp2, char* pwd);
void decfile(FILE* fp1, FILE* fp2, char* pwd);
unsigned SEED=56781234;
int main(int argc, char* argv[])
{
//检查参数
if (argc != 5)
{
printf("参数必须为4个")