C语言利用“异或”实现的简单数字加密
(2014-10-16 21:32:09)
标签:
it |
分类: 程序设计 |
在C语言中,“异或”是一种位运算,可以表示为“a ^ b”。如果a、b两个操作数的对应位相同,则运算结果的对应位为“0”;否则运算结果的对应位为“1”。例如,以下代码段
char
a=0x86;
char
b=0x35;
char c=a ^ b;
运算结果为c=0xb3
有趣的是,如果再执行一次 c=c ^ b,则c的值与a相等。
从数字通信的角度说,可以把b当成一个由通信双方共同约定的密钥。甲方将a与b“异或”运算后得到c,通过公共信道发送时,不掌握密钥的人即使截收了c,也很难在短时间内猜到它所代表的真实内容。乙方接收到c以后,只要将它与密钥b再进行一次“异或”运算,就能轻而易举地将其解密,恢复原来的信息。这就是专用密钥体制的基本思想,由于加密、解密密钥相同,又称为对称密钥体制。
与之相对应的还有一个公开密钥体制,它公开发布一个加密密钥,允许任何人用这个密钥将信息加密后发给自己,然后用不公开的解密密钥将其解密。其他人由于不拥有解密密钥,即使通过公共信道获得了加密信息,也无法知道其中的内容。在当前的数字通信中,公开密钥体制得到了更广泛的应用,因为理论比较复杂,这里就不展开讨论了。
在实际的数字通信过程中,传输的内容必定是一个或多个数据块,用来实现加密、解密的密钥也不会是单个字节。在一般意义上,密钥的位数越多,破解加密信息所需要花费的时间越长。
下面的程序是利用字符串“CHINA”作为密钥,实现了对键盘输入字符串加密,保存到指定的数据文件中,然后紧接着从数据文件中读出这个字符串,用同样的密钥将其解密,并将解密信息显示在屏幕上。
加密时,将输入字符串中的第一个字符与“C”相“异或”,第二个字符与“H”相“异或”,……,第五个字符与“A”相“异或”,然后将第六个字符又与“C”相“异或”,依此类推。解密的过程与加密完全相同。
程序代码如下:
#include
#include
#include
int main()
{
}
其实,这段程序是有些不足之处的,到实用阶段还有相当大的差距。只是程序越完善,代码就越复杂。只要掌握了基本方法,自然就会想出完善的措施。

加载中…