您的位置:首页 > 编程语言 > C语言/C++

117 用C语言对数据或文件内容进行加密

2017-06-07 10:42 363 查看
C学习网:链接->C学习网

C训练网:链接->C训练网
数据加密解密是一个常用的功能,如果你不希望让别人看到文件中的内容,可以通过密钥(也称”密码“)将文件的内容加密。比如文本文件(.txt),加密前的内容是能够读懂的,加密后的内容是”乱码“,都是一些奇怪的字符,根本无法阅读。

数据加密解密的原理也很简单,就是使用异或运算。请先看下面的代码:

#include <stdio.h>
#include <stdlib.h>

int main(){
char plaintext = 'a'; // 明文
char secretkey = '!'; // 密钥
char ciphertext = plaintext ^ secretkey; // 密文
char decodetext = ciphertext ^ secretkey; // 解密后的字符
char buffer[9];

printf(" char ASCII\n");
// itoa()用来将数字转换为字符串,可以设定转换时的进制(基数)
// 这里将字符对应的ascii码转换为二进制
printf(" plaintext %c %7s\n", plaintext, itoa(plaintext, buffer, 2));
printf(" secretkey %c %7s\n", secretkey, itoa(secretkey, buffer, 2));
printf("ciphertext %c %7s\n", ciphertext, itoa(ciphertext, buffer, 2));
printf("decodetext %c %7s\n", decodetext, itoa(decodetext, buffer, 2));

return 0;
}

运行结果:
char    ASCII
plaintext   a     1100001
secretkey   !      100001
ciphertext   @     1000000
decodetext   a     1100001

看到了吗,plaintext 与 decodetext相同,也就是说,两次异或运算后还是原来的结果。

这就是加密的关键技术:
通过一次异或运算,生成密文,密文没有可读性,与原文风马牛不相及,这就是加密;
密文再经过一次异或运算,就会还原成原文,这就是解密的过程;
加密和解密需要相同的密钥,如果密钥不对,是无法成功解密的。

上面的加密算法称为对称加密算法,加密和解密使用同一个密钥。

如果加密和解密的密钥不同,则称为非对称加密算法。在非对称算法中,加密的密钥称为公钥,解密的密钥称为私钥,只知道公钥是无法解密的,还必须知道私钥。

注意:程序中的 itoa() 位于 stdlib.h 头文件,它并不是一个标准的C函数,只有Windows下有,更多信息请猛击:C语言itoa()函数和atoi()函数详解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐