当前位置:首页 > PHP教程 > php类库 > 列表

PHP实现的DES加密解密类定义与用法示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-10-20 12:05:46 浏览: 评论:0 

这篇文章主要介绍了PHP实现的DES加密解密类定义与用法,结合实例形式分析了基于php定义的DES加密解密类与具体使用方法,需要的朋友可以参考下。

本文实例讲述了PHP实现的DES加密解密类定义与用法,分享给大家供大家参考,具体如下:

今天写App接口的时候需要传递加密数据给APP端,于是就写了下面的DES加密类,亲测正确代码如下

  1. class CryptDes { 
  2.  function __construct(){ 
  3.   $this->key = 'codelovers'//密钥 
  4.   $this->iv = '15548632'//偏移量 
  5.  } 
  6.  /* 
  7.   * 加密 
  8.   */ 
  9.  function encrypt($input){ 
  10.   $size = mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC); //3DES加密将MCRYPT_DES改为MCRYPT_3DES 
  11.   $input = $this->pkcs5_pad($input$size); //如果采用PaddingPKCS7,请更换成PaddingPKCS7方法。 
  12.   $key = str_pad($this->key,8,'0'); //3DES加密将8改为24 
  13.   $td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_CBC, ''); 
  14.   if$this->iv == '' ) 
  15.   { 
  16.    $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
  17.   } 
  18.   else 
  19.   { 
  20.    $iv = $this->iv; 
  21.   } 
  22.   @mcrypt_generic_init($td$key$iv); 
  23.   $data = mcrypt_generic($td$input); 
  24.   mcrypt_generic_deinit($td); 
  25.   mcrypt_module_close($td); 
  26.   $data = base64_encode($data);//如需转换二进制可改成 bin2hex 转换 
  27.   return $data
  28.  } 
  29.  /* 
  30.   * 解密 
  31.   */ 
  32.  function decrypt($encrypted){ 
  33.   $encrypted = base64_decode($encrypted); //如需转换二进制可改成 bin2hex 转换 
  34.   $key = str_pad($this->key,8,'0'); //3DES加密将8改为24 
  35.   $td = mcrypt_module_open(MCRYPT_DES,'',MCRYPT_MODE_CBC,'');//3DES加密将MCRYPT_DES改为MCRYPT_3DES 
  36.   if$this->iv == '' ) 
  37.   { 
  38.    $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
  39.   } 
  40.   else 
  41.   { 
  42.    $iv = $this->iv; 
  43.   } 
  44.   $ks = mcrypt_enc_get_key_size($td); 
  45.   @mcrypt_generic_init($td$key$iv); 
  46.   $decrypted = mdecrypt_generic($td$encrypted); 
  47.   mcrypt_generic_deinit($td); 
  48.   mcrypt_module_close($td); 
  49.   $y=$this->pkcs5_unpad($decrypted); 
  50.   return $y
  51.  } 
  52.  function pkcs5_pad ($text$blocksize) { 
  53.   $pad = $blocksize - (strlen($text) % $blocksize); 
  54.   return $text . str_repeat(chr($pad), $pad); 
  55.  } 
  56.  function pkcs5_unpad($text){ 
  57.   $pad = ord($text{strlen($text)-1}); 
  58.   if ($pad > strlen($text)) { 
  59.    return false; 
  60.   } 
  61.   if (strspn($textchr($pad), strlen($text) - $pad) != $pad){ 
  62.    return false; 
  63.   } 
  64.   return substr($text, 0, -1 * $pad); 
  65.  } 
  66.  function PaddingPKCS7($data) { 
  67.   $block_size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);//3DES加密将MCRYPT_DES改为MCRYPT_3DES 
  68.   $padding_char = $block_size - (strlen($data) % $block_size); 
  69.   $data .= str_repeat(chr($padding_char),$padding_char); 
  70.   return $data
  71.  } 

用法如下:

  1. $str = 'www.phpfensi.com'
  2. $des = new CryptDes(); 
  3. $mres = $des->encrypt($str); //加密 
  4. echo $mres."<br/>"
  5. $jres = $des->decrypt($mres); //解密 
  6. echo $jres."<br/>"

运行结果:

TxqbmhK86YWdTtTAQoDOqA==

www.phpfensi.com

附录:php7 des加密解密

以下内容转自:https://blog.csdn.net/qq_35979073/article/details/81449590

1.在linux 环境中如果没有装encrypt扩展 或者php版本大于7.1不支持encrypt加密扩展

可以使用openssl加密扩展

下面是封装的加密和解密的方法可直接调用

  1. /** 
  2.  * des-ecb加密 
  3.  * @param string $data 要被加密的数据 
  4.  * @param string $key 加密密钥(64位的字符串) 
  5.  */ 
  6. function des_ecb_encrypt($data$key){ 
  7.   return openssl_encrypt ($data'des-ecb'$key); 
  8.    
  9. /** 
  10.  * des-ecb解密 
  11.  * @param string $data 加密数据 
  12.  * @param string $key 加密密钥 
  13.  */ 
  14. function des_ecb_decrypt ($data$key){ 
  15.   return openssl_decrypt ($data'des-ecb'$key); 

说明: $key 加密密钥(64位的字符串)  自己定义的。

Tags: DES加密解密类

分享到: