PHP通用DES加密算法

浏览量:9174 | 分类:PHP | 发布日期:2010-10-11

 与java通用的加密解密方法

代码如下
  1. class Des_Crypt
  2. {
  3.     private $key;
  4.    
  5.     function __construct($key)
  6.     {
  7.         $this->key = $key;
  8.     }
  9.    
  10.     function encrypt($string)
  11.     {
  12.         $size = mcrypt_get_block_size('des','ecb');
  13.         $string = mb_convert_encoding($string, 'GBK', 'UTF-8');
  14.         $string = $this->pkcs5_pad($string, $size);
  15.         $key = $this->key;
  16.         $td = mcrypt_module_open('des', '', 'ecb', '');
  17.         $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  18.         @mcrypt_generic_init($td, $key, $iv);
  19.         $data = mcrypt_generic($td, $string);
  20.         mcrypt_generic_deinit($td);
  21.         mcrypt_module_close($td);
  22.         $data = base64_encode($data);
  23.         return $data;
  24.     }
  25.     function decrypt($string)
  26.     {
  27.         $string = base64_decode($string);
  28.         $key =$this->key;
  29.         $td = mcrypt_module_open('des','','ecb','');
  30.         //使用MCRYPT_DES算法,cbc模式
  31.         $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  32.         $ks = mcrypt_enc_get_key_size($td);
  33.         @mcrypt_generic_init($td, $key, $iv);
  34.         //初始处理
  35.         $decrypted = mdecrypt_generic($td, $string);
  36.         //解密
  37.         mcrypt_generic_deinit($td);
  38.         //结束
  39.         mcrypt_module_close($td);
  40.        
  41.         $result = $this->pkcs5_unpad($decrypted);
  42.         $result = mb_convert_encoding($result, 'UTF-8', 'GBK');
  43.         return $result;
  44.     }
  45.     function pkcs5_pad ($text, $blocksize)
  46.     {
  47.         $pad = $blocksize - (strlen($text) % $blocksize);
  48.         return $text . str_repeat(chr($pad), $pad);
  49.     }
  50.     function pkcs5_unpad($text)
  51.     {
  52.         $pad = ord($text{strlen($text)-1});
  53.         if ($pad > strlen($text))
  54.         {
  55.             return false;
  56.         }
  57.         if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
  58.         {
  59.             return false;
  60.         }
  61.         return substr($text, 0, -1 * $pad);
  62.     }
  63. }
  64. /*
  65. For example:
  66.  
  67. $key = "!@#%test";
  68. $string1 = "13701014606";
  69. $string2 = "这是中文测试";
  70. $des = new Des_Crypt($key);
  71.  
  72. $encryption = $des->encrypt($string2);
  73. $decryption = $des->decrypt($encryption);
  74.  
  75. echo "原始值:".$decryption;
  76. echo "<br />";
  77. echo "加密值:".$encryption;
  78. */

上一篇:

下一篇: 金秋百望山

评论

lovedear   2010-11-11 06:02:04

前段时间自己写了个。net的

过客   2017-06-28 23:51:10

过客   2017-06-28 23:51:03