可解密的md6(think_encrypt和think_decrypt改良版)

jerry thinkphp 2015年11月19日 收藏
一直想要md5那种加密等长,又能解密的对称加密解密方法,于是有了md6。
第一步,去OT扣来think_encrypt和think_decrypt函数。
第二步,打造自己的md6:
  1. function md6($str='',$de=false){
  2.     $key=('yourkey');
  3.     $char=('MDAwMDAwMDAwM');
  4.     if($str!=''){ 
  5.         if($de){
  6.             $str=$char.$str;
  7.             $str=think_decrypt($str,$key);
  8.         }else{
  9.             $str=think_encrypt($str,$key);
  10.             $str=str_replace($char, '',$str);
  11.         }
  12.     }
  13.     return $str;
  14. }
用法举例:
  1. function test(){
  2.   $str= '';
  3.   for($i=1;$i<1000;$i++){
  4.     $str=md6($i);
  5.     echo($str.'    |    '.md6($str,true).'<br />');
  6.   }
  7. }
输出结果:
  1. IKKdXY | 1
  2. IKgdXY | 2
  3. IKwdXY | 3
  4. IN6dXY | 4
  5. IOKdXY | 5
  6. IOgdXY | 6
  7. IOwdXY | 7
  8. IR6dXY | 8
  9. ISKdXY | 9
  10. IKNeXY | 10 
  11. ...

  12. IKNebCzdqRv | 10000
  13. IKNebCzdqhv | 10001
  14. IKNebCzdqxv | 10002
  15. IKNebCzdrBv | 10003
  16. IKNebCzdrRv | 10004
  17. IKNebCzdrhv | 10005
  18. IKNebCzdrxv | 10006
  19. IKNebCzdsZv | 10007
  20. IKNebCzdspv | 10008
  21. IKNebCzds5v | 10009
  22. IKNebCzhqRv | 10010 
  23. ...

  24. IKNfbGzhqSpgqh2cg | 11110000
  25. IKNfbGzhqSpgqh6cg | 11110001
  26. IKNfbGzhqSpgqh-cg | 11110002
  27. IKNfbGzhqSpgqiCcg | 11110003
  28. IKNfbGzhqSpgqiGcg | 11110004
  29. IKNfbGzhqSpgqiKcg | 11110005
  30. IKNfbGzhqSpgqiOcg | 11110006
  31. IKNfbGzhqSpgqiYcg | 11110007
  32. IKNfbGzhqSpgqiccg | 11110008
  33. IKNfbGzhqSpgqigcg | 11110009
  34. IKNfbGzhqSpgrh2cg | 11110010
<3位数(数字和英文)加密后的密文长度为:6,
4-6位数(数字和英文)加密后的密文长度为:11,
7-9位数(数字和英文)加密后的密文长度为:17,



在一定范围内加密出来的密文是等长的,有什么作用就自己去发挥吧,我只能帮到这里了!