经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
密码学:一.异或加密
来源:cnblogs  作者:EthanWell  时间:2020/12/8 9:09:37  对本文有异议

异或加密是密码学中一种简单的加密算法,常作为更为复杂的加密算法的组成部分。

原理

异或运算:首先异或表示当两个数用二进制表示,进行异或运算时,当前位的两个二进制不同则为1相同则为0。
A ⊕ 0 = A
A ⊕ A = 0
A ⊕ B ⊕ B = A
文本的每个字符可以通过与给定的密钥进行按位异或运算来加密。如果要解密,只需要将加密后的结果与密钥再次进行按位异或运算即可。

异或运算

代码实践

golang

  1. func main() {
  2. key := []byte{0x93, 0x44, 0x47, 0xa1, 0x13, 0x3d, 0x34, 0x23, 0xb1, 0x42, 0x11}
  3. cipher := enc("you are a good person",key)
  4. fmt.Println(cipher)
  5. fmt.Println(dec(cipher,key))
  6. }
  7. func enc(src string, key []byte) string {
  8. var result string
  9. j := 0
  10. s := ""
  11. bt := []rune(src)
  12. for i := 0; i < len(bt); i++ {
  13. s = strconv.FormatInt(int64(byte(bt[i])^key[j]), 16)
  14. if len(s) == 1 {
  15. s = "0" + s
  16. }
  17. result = result + (s)
  18. j = (j + 1) % len(key)
  19. }
  20. return result
  21. }
  22. func dec(src string, key []byte) string {
  23. var result string
  24. var s int64
  25. j := 0
  26. bt := []rune(src)
  27. for i := 0; i < len(src)/2; i++ {
  28. s, _ = strconv.ParseInt(string(bt[i*2:i*2+2]), 16, 0)
  29. result = result + string(byte(s)^key[j])
  30. j = (j + 1) % len(key)
  31. }
  32. return result
  33. }

php

  1. $key = "this is the key";
  2. $content = "you are a good person";
  3. $cipher = enc($content,$key);
  4. var_dump($cipher);
  5. echo dec($cipher, $key);
  6. function enc($str,$key){
  7. return str_replace('=','',base64_encode($str ^ $key));
  8. }
  9. function dec($str,$key){
  10. return base64_decode($str) ^ $key;
  11. }

异或密码值得使用的原因主要是其易于实现,而且计算成本小。简单重复异或加密有时用于不需要特别安全的情况下来隐藏信息。
如果使用不断重复的密钥,利用频率分析就可以破解这种简单的异或密码。一旦消息的内容被猜出或知道,密钥就会泄露。
如果密钥是随机的(不重复),异或密码就会更为安全。若密钥是真正随机的,结果就是一次性密码本,这种密码在理论上是不可破解的。

原文链接:http://www.cnblogs.com/ourongxin/p/14062479.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号