C语言基本加密解密

基本加密解密

对于位运算来说,由于两次异或运算可以将值还原这个特性,所以经常使用异或进行加密解密运算,如下:

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个")
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值