免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2753 | 回复: 0
打印 上一主题 下一主题

PHP版3DES加解密类 兼容JAVA [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 01:12 |只看该作者 |倒序浏览
  1. <?php
  2. /**
  3.  * PHP版3DES加解密类
  4.  * 可与java的3DES(DESede/CBC/PKCS5Padding)加密方式兼容
  5.  */

  6. class Crypt3Des {
  7.      var $key;
  8.      var $iv;
  9.      function Crypt3Des($key, $iv){
  10.         $this->key = $key;
  11.         $this->iv = $iv;
  12.      }
  13.      
  14.      function encrypt($input){
  15.          $size = mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_CBC);
  16.          $input = $this->pkcs5_pad($input, $size);
  17.          $key = str_pad($this->key,24,'0');
  18.          $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
  19.          if( $this->iv == '' )
  20.          {
  21.              $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  22.          }
  23.          else
  24.          {
  25.              $iv = $this->iv;
  26.          }
  27.          @mcrypt_generic_init($td, $key, $iv);
  28.          $data = mcrypt_generic($td, $input);
  29.          mcrypt_generic_deinit($td);
  30.          mcrypt_module_close($td);
  31.          $data = base64_encode($data);
  32.          return $data;
  33.      }

  34.      function decrypt($encrypted){
  35.          $encrypted = base64_decode($encrypted);
  36.          $key = str_pad($this->key,24,'0');
  37.          $td = mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_CBC,'');
  38.           if( $this->iv == '' )
  39.          {
  40.              $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  41.          }
  42.          else
  43.          {
  44.              $iv = $this->iv;
  45.          }
  46.          $ks = mcrypt_enc_get_key_size($td);
  47.          @mcrypt_generic_init($td, $key, $iv);
  48.          $decrypted = mdecrypt_generic($td, $encrypted);
  49.          mcrypt_generic_deinit($td);
  50.          mcrypt_module_close($td);
  51.          $y=$this->pkcs5_unpad($decrypted);
  52.          return $y;
  53.      }

  54.      function pkcs5_pad ($text, $blocksize) {
  55.          $pad = $blocksize - (strlen($text) % $blocksize);
  56.          return $text . str_repeat(chr($pad), $pad);
  57.      }

  58.      function pkcs5_unpad($text){
  59.          $pad = ord($text{strlen($text)-1});
  60.          if ($pad > strlen($text)) {
  61.              return false;
  62.          }
  63.          if (strspn($text, chr($pad), strlen($text) - $pad) != $pad){
  64.              return false;
  65.          }
  66.          return substr($text, 0, -1 * $pad);
  67.      }

  68.      function PaddingPKCS7($data) {
  69.          $block_size = mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
  70.          $padding_char = $block_size - (strlen($data) % $block_size);
  71.          $data .= str_repeat(chr($padding_char),$padding_char);
  72.          return $data;
  73.      }
  74. }

  75. $des = new Crypt3Des("123456788765432","12345678");
  76. echo $ret = $des->encrypt("sjfalfjaljfajflasjflaf");
  77. ?>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP