php DES加密算法

  1. <?php  
  2. class DES  
  3. {  
  4.     var $key;  
  5.     var $iv//偏移量  
  6.       
  7.     function DES( $key$iv=0 ) {  
  8.     //key长度8例如:1234abcd  
  9.         $this->key = $key;  
  10.         if$iv == 0 ) {  
  11.             $this->iv = $key//默认以$key 作为 iv  
  12.         } else {  
  13.             $this->iv = $iv//mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );  
  14.         }  
  15.     }  
  16.       
  17.     function encrypt($str) {  
  18.     //加密,返回大写十六进制字符串  
  19.         $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );  
  20.         $str = $this->pkcs5Pad ( $str$size );  
  21.         return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );  
  22.     }  
  23.       
  24.     function decrypt($str) {  
  25.     //解密  
  26.         $strBin = $this->hex2bin( strtolower$str ) );  
  27.         $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );  
  28.         $str = $this->pkcs5Unpad( $str );  
  29.         return $str;  
  30.     }  
  31.       
  32.     function hex2bin($hexData) {  
  33.         $binData = "";  
  34.         for($i = 0; $i < strlen ( $hexData ); $i += 2) {  
  35.             $binData .= chr ( hexdec ( substr ( $hexData$i, 2 ) ) );  
  36.         }  
  37.         return $binData;  
  38.     }  
  39.   
  40.     function pkcs5Pad($text$blocksize) {  
  41.         $pad = $blocksize - (strlen ( $text ) % $blocksize);  
  42.         return $text . str_repeat ( chr ( $pad ), $pad );  
  43.     }  
  44.       
  45.     function pkcs5Unpad($text) {  
  46.         $pad = ord ( $text {strlen ( $text ) - 1} );  
  47.         if ($pad > strlen ( $text ))  
  48.             return false;  
  49.         if (strspn ( $textchr ( $pad ), strlen ( $text ) - $pad ) != $pad)  
  50.             return false;  
  51.         return substr ( $text, 0, - 1 * $pad );  
  52.     }  
  53.       
  54. }  
  55. ?>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值