c语言实现xor加密
异或运算:^
定义:它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。
特点:如果对一个值连续做两次 XOR,会返回这个值本身。
1010 ^ 1111 // 第一次异或后结果:0101 0101 ^ 1111 // 第二次异或后结果:1010
上面代码中,原始值是1010,再任意选择一个值(上例是1111),做两次 XOR,最后总是会得到原始值1010。这 在数学上是很容易证明的。
加密应用:
XOR 的这个特点,使得它可以用于信息的加密。
message XOR key // cipherText cipherText XOR key //message
上面代码中,原始信息是message,密钥是key,第一次 XOR 会得到加密文本cipherText。对方拿到以后,再用 key做一次 XOR 运算,就会还原得到message
c语言实现:
#include <stdio.h> #define key 0x86 int main(int argc, char *argv[]) { char text[100]; int i,j; for(i=0;i<100;i++){ text[i]=getchar(); if(text[i]=='\n'){ text[i]='\0'; break; } } for(j=0;j<i;j++){ text[j]=text[j] ^ key; } puts(text); for(j=0;j<i;j++){ text[j]=text[j] ^ key; } puts(text); return 0; }
或者:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define KEY 0x86 int main() { char p_data[16] = {"Hello World!"}; char Encrypt[16]={0},Decode[16]={0}; int i; for(i = 0; i < strlen(p_data); i++) { Encrypt[i] = p_data[i] ^ KEY; } for(i = 0; i < strlen(Encrypt); i++) { Decode[i] = Encrypt[i] ^ KEY; } printf("Initial date: %s\n",p_data); printf("Encrypt date: %s\n",Encrypt); printf("Decode date: %s\n",Decode); return 0; }