XOR加密
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
[代替密码和换位密码]
在计算机出现前,密码学由基于字符的密码算法构成。不同的密码算法是字符之间互相代替 或者互相之间换位 ,好的密码算法是结合这两种方法,每次进行多次运算。现在的密码学变得复杂了,但原理没有改变。本质的变化是 :算法对位而不是对字母进行变换。实际上这只是字母表长度上的改变,从26个元素变为2个元素 。大多数好的密码算法仍然是代替和换位的元素组合。
[简单异或]
下面是一个简单异或的对称加解密算法。明文用一个关键字做异或运算以产生密文。因为用同一值去异或两次就可以恢复出原来的值 ,所以加密和解密都严格采用同一程序。即:
P XOR K = C
C XOR K = P
这种方法比较简单,没有实际的保密性,甚至没有计算机也能够破译。
一种思路是使用重合码计数法 找出密钥的长度,按此长度移动密文,并且和自身异或。
[异或的好处]
在算法中经常会用到异或运算。比如下面两种常见的情况:
(1) 在1,1,2,2,3,3…k,k…n,n个数的序列中,删除任意一数并求此数。
此时用XOR就比较方便,如果通过求和的话,要考虑溢出的情况,而用XOR绝对不会发生溢出。
(2) 交换两个整形变量。
x^=y;
y^=x;
x^=y;
运行结果:
PS: 老邓的写法,也记录在这里
01.#include <iostream>
02.using namespace std;
03.int main()
04.{
05. char Msg[133] = “This is a plaintext”;
06. cout << Msg << endl;
07. char Key[8] = “abcde”;
08. for (int i = 0; i < 133; ++i)
09. Msg[i] ^= Key[i % 8];
10. cout << Msg << endl;
11. for (int i = 0; i < 133; ++i)
12. Msg[i] ^= Key[i % 8];
13. cout << Msg << endl;
14. return 0;
15.}
from http://blog.csdn.net/delphiwcdj/article/details/5921771#comments
学习日记,兼职软件设计,软件修改,毕业设计。
本文出自 学习日记,转载时请注明出处及相应链接。
本文永久链接: https://www.softwareace.cn/?p=676
一条评论
These kind of post are always inspiring and I prefer to check out quality content so I happy to find many good point here in the post, writing is simply great, thank you for the post
Oakley Jupiter Factory Light http://www.tqun.com/listinfo.php?pid=2158