精易论坛

标题: 易语言+PHP 文本加解密 带秘钥 [打印本页]

作者: xiaotao110    时间: 2022-12-20 14:34
标题: 易语言+PHP 文本加解密 带秘钥
提供易语言 PHP的加解密方法, 可用于关键信息加密使用(安全性不太高, 拿到秘钥就能破J, 但是总比没有好)

易语言 加解密
  1. .版本 2
  2. .支持库 dp1

  3. .子程序 小涛_加解密, 文本型
  4. .参数 文本内容, 文本型
  5. .参数 是否解密, 逻辑型
  6. .参数 秘钥, 文本型
  7. .局部变量 秘钥长度, 整数型
  8. .局部变量 文本长度, 整数型
  9. .局部变量 i, 整数型
  10. .局部变量 rndkey, 整数型, , "256"
  11. .局部变量 box, 整数型, , "256"
  12. .局部变量 j, 整数型
  13. .局部变量 tmp, 整数型
  14. .局部变量 a, 整数型
  15. .局部变量 re, 文本型
  16. .局部变量 返回内容, 文本型

  17. 秘钥 = 到文本 (取数据摘要 (到字节集 (秘钥)))
  18. 秘钥长度 = 取文本长度 (秘钥)
  19. .如果 (是否解密 = 真)
  20.     文本内容 = 到文本 (编码_BASE64解码 (文本内容, 真))
  21. .否则
  22.     文本内容 = 取文本左边 (取数据摘要 (到字节集 (文本内容 + 秘钥)), 8) + 文本内容
  23. .如果结束
  24. 文本长度 = 取文本长度 (文本内容)

  25. .计次循环首 (256, i)
  26.     rndkey [i] = 取代码 (取文本中间 (秘钥, (i - 1) % 秘钥长度 + 1, 1), )
  27.     box [i] = i - 1
  28. .计次循环尾 ()
  29. j = 0
  30. .计次循环首 (256, i)
  31.     j = (j + box [i] + rndkey [i]) % 256
  32.     tmp = box [i]
  33.     box [i] = box [j + 1]
  34.     box [j + 1] = tmp
  35. .计次循环尾 ()
  36. a = 0
  37. j = 0
  38. .计次循环首 (文本长度, i)
  39.     a = (a + 1) % 256
  40.     j = (j + box [a + 1]) % 256
  41.     tmp = box [a + 1]
  42.     box [a + 1] = box [j + 1]
  43.     box [j + 1] = tmp
  44.     re = re + 字符 (小涛_xor (取代码 (取文本中间 (文本内容, i, 1), ), box [到整数 ((box [a + 1] + box [j + 1]) % 256) + 1]))
  45. .计次循环尾 ()
  46. .如果 (是否解密 = 真)
  47.     返回内容 = 取文本中间 (re, 9, 取文本长度 (re))
  48. .否则
  49.     返回内容 = 子文本替换 (编码_BASE64编码 (到字节集 (re)), “=”, “”, , , 真)
  50. .如果结束

  51. 返回 (返回内容)

  52. .子程序 小涛_xor, 整数型, , 位异或
  53. .参数 Value1, 整数型
  54. .参数 Value2, 整数型

  55. 置入代码 ({ 139, 69, 8, 51, 69, 12, 137, 236, 93, 194, 8, 0 })
  56. 返回 (0)
复制代码

PHP 加解密
  1. /**
  2. * 文本加解密
  3. */
  4. function textEnc($string,$operation,$key=''){   
  5.     $key=md5($key);   
  6.     $key_length=strlen($key);   
  7.     $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;   
  8.     $string_length=strlen($string);   
  9.     $rndkey=$box=array();   
  10.     $result='';
  11.     for($i=0;$i<=255;$i++){   
  12.         $rndkey[$i]=ord($key[$i%$key_length]);
  13.         $box[$i]=$i;   
  14.     }
  15.     for($j=$i=0;$i<256;$i++){   
  16.         $j=($j+$box[$i]+$rndkey[$i])%256;   
  17.         $tmp=$box[$i];
  18.         $box[$i]=$box[$j];
  19.         $box[$j]=$tmp;
  20.     }   
  21.     for($a=$j=$i=0;$i<$string_length;$i++){   
  22.         $a=($a+1)%256;   
  23.         $j=($j+$box[$a])%256;
  24.         $tmp=$box[$a];   
  25.         $box[$a]=$box[$j];   
  26.         $box[$j]=$tmp;   
  27.         $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));  
  28.     }   
  29.     if($operation=='D'){   
  30.         if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){   
  31.             return substr($result,8);   
  32.         }else{
  33.             return'';
  34.         }
  35.     }else{   
  36.         return str_replace('=','',base64_encode($result));   
  37.     }   
  38. }
复制代码




作者: 嫂子    时间: 2022-12-20 14:49
就是Discuz的 AUTH算法
作者: 清风徐来2    时间: 2022-12-20 16:43
感谢分享
作者: 剑轶    时间: 2022-12-20 18:48
这个看着不像是RC4?
作者: Wz613613    时间: 2022-12-21 08:36
感谢分享,很给力!~
作者: kvx55c    时间: 2022-12-21 14:36
努力挣分中
作者: 一指温柔    时间: 2022-12-21 14:42
感谢分享,支持开源~
作者: 吃干饭的锅    时间: 2022-12-21 15:04
        感谢分享,支持你
作者: 396384183    时间: 2022-12-23 10:10

很好谢谢分享11
作者: 小布仕奇    时间: 2022-12-28 15:01
666666666666666666666
作者: 六先生    时间: 2023-1-5 16:08
支持开源~!感谢分享
作者: xiaotao110    时间: 2023-1-8 15:12
嫂子 发表于 2022-12-20 14:49
就是Discuz的 AUTH算法

应该是吧 PHP网上找的 然后自己弄了个易语言版本 刚好最近用得上
作者: 嫂子    时间: 2023-1-8 15:48
剑轶 发表于 2022-12-20 18:48
这个看着不像是RC4?

RC4+MD5变异




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4