最初的密码程序是在Hirst First c里面看到的,大概内容如下:
对待加密的字符串的每一个字符和某个数值进行一次按位异或得到密文,再进行一次按位异或得到明文。
补充知识:按位异或的结果是“同位得1,异位得0”。
比如数值2和数值1进行按位异或的情况如下:
2对应的二进制表示:10
1对应的二进制表示:01
2^1的结果最终表示:00
这个时候再把2^1的结果和1进行按位异或
01
00
10
原文的加密程序如下:
#include<stdio.h> //加密解密程序 void encrypt(char *message) { while (*message) { //对message的每一个字符和31进行按位异或 *message = *message ^ 31; message++; } } int main() { char s[] = "Hello qizexi"; //运行一次:进行加密 encrypt(s); printf("加密:%s ", s); //再运行一次是解密 encrypt(s); printf("解密:%s ", s); return 0; }
既然可以和某个数值进行按位异或进行加密,那么是否可以和某个字符串进行按位异或呢,答案是可以。
原理如下:待加密的密文的每一个字符和一个密匙(任意字符串) 的每一个字符分别进行一次按位异或进行加密解密即可。
最终按密匙加密的程序如下:
#include<stdlib.h> #include<string.h> #include<stdio.h> //加密解密程序 void encrypt(char *message, const char *key) { int i; int len = strlen(key); while (*message) { //对message的每一个字符和31进行按位异或 for (i = 0; i < len; i++) { *message = *message ^ (int)key[i]; } message++; } } int main() { //密文 char s[] = "Hello qizexi"; //密匙 char *key = "qizexi@163.com"; //运行一次:进行加密 encrypt(s, key); printf("加密:%s ", s); //再运行:进行解密 encrypt(s, key); printf("解密:%s ", s); return 0; }
怎么样是不是粉简单,感觉在你的项目中引入这个程序吧。