【算法】XOR Encryption 异或加密

XOR Encryption 异或加密

---------------------------------------------------

关于异或:
a,b不相同, 结果为1.
a,b相同, 结果为0.
即: 0^0=0, 1^0=1, 0^1=1, 1^1=0
异或运算符的特点是: 与同一个数异或两次仍为原值, 利用异或的这种特性, 可以实现无临时变量的值交换

a = a^b
b = a^b
a = a^b

-----------------------------------------------------------------------

异或加密, 字符串S, 秘钥K, 伪代码如下

WHILE (S[i] != END)
    S[i] = S[i] ^ K[i % len(K)]
    i++
END

可以看出异或加密是一种很简单的加密算法, 对每个字符和对应的秘钥字符进行异或运算即可。
根据异或的特性, 与同一个数异或两次仍为原值, 所以加密两次等于解密。因为加密后的长度
数据与原值长度一致,所以可以在网络传输时使用。但因为算法简单,所以破解起来也很容易。
比起加密更像是一种编码。

-------------------------------------------------------------

参考链接:
https://www.programmingalgorithms.com/algorithm/xor-encryption/c/
https://www.cnblogs.com/albertblues/p/5670528.html
https://www.cnblogs.com/shundong106/p/10213113.html

 

 1 char *xor_encryp (const char *s, size_t sl, const char *k, size_t kl) {
 2     size_t i = 0;
 3     char *d = NULL;
 4 
 5     if (!s || !k || sl == 0 || kl == 0)
 6         return NULL;
 7 
 8     d = (char *)malloc(sl + 1);
 9     if (!d)
10         return NULL;
11 
12     for (i = 0; i < sl; i++) {
13         d[i] = s[i] ^ k[i % kl];
14     }
15     d[i] = 0;
16     return d;
17 }
18 
19 int main (int argc, char *argv[]) {
20     const char *s = "The quick brown fox jumps over the lazy dog.";
21     const char *key = "secret";
22     size_t sl = strlen(s), kl = strlen(key);
23     char *en = NULL, *de = NULL;
24 
25     en = xor_encryp(s, sl, key, kl);
26     de = xor_encryp(en, sl, key, kl);
27 
28     printf("%s\n", en);
29     printf("%s\n", de);
30 
31     free(en);
32     free(de);
33     return 1;
34 }

 

上一篇:C#-.NET Compact Framework连接字符串加密/安全


下一篇:PHP-加密从iPhone到Web应用程序的请求?