·您当前的位置:主页 > 技术教程 > PHP教程 >

[php]php中3DES加密一个非常有用的3des加密

时间:2014-09-28 12:45酷播
这是一个非常有用的3des加密,在多数情况下可以直接拿来用。很不错哦~!

这是一个非常有用的3des加密,在多数情况下可以直接拿来用。很不错哦~!

  1. <?php 
  2. class Crypt3Des { 
  3.     public $key = "bugaosuni"; // 这个根据实际情况写 
  4.     function encrypt($input) { // 数据加密 
  5.         $size = mcrypt_get_block_size ( MCRYPT_3DES, 'ecb' ); 
  6.         $input = $this->pkcs5_pad ( $input, $size ); 
  7.         $key = str_pad ( $this->key, 24, '0' ); 
  8.         $td = mcrypt_module_open ( MCRYPT_3DES, '', 'ecb', '' ); 
  9.         $iv = @mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND ); 
  10.         @mcrypt_generic_init ( $td, $key, $iv ); 
  11.         $data = mcrypt_generic ( $td, $input ); 
  12.         mcrypt_generic_deinit ( $td ); 
  13.         mcrypt_module_close ( $td ); 
  14.         $data = base64_encode ( $data ); 
  15.         return $data; 
  16.     } 
  17.     function decrypt($encrypted) { // 数据解密 
  18.         $encrypted = base64_decode ( $encrypted ); 
  19.         $key = str_pad ( $this->key, 24, '0' ); 
  20.         $td = mcrypt_module_open ( MCRYPT_3DES, '', 'ecb', '' ); 
  21.         $iv = @mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND ); 
  22.         $ks = mcrypt_enc_get_key_size ( $td ); 
  23.         @mcrypt_generic_init ( $td, $key, $iv ); 
  24.         $decrypted = mdecrypt_generic ( $td, $encrypted ); 
  25.         mcrypt_generic_deinit ( $td ); 
  26.         mcrypt_module_close ( $td ); 
  27.         $y = $this->pkcs5_unpad ( $decrypted ); 
  28.         return $y; 
  29.     } 
  30.     function pkcs5_pad($text, $blocksize) { 
  31.         $pad = $blocksize - (strlen ( $text ) % $blocksize); 
  32.         return $text . str_repeat ( chr ( $pad ), $pad ); 
  33.     } 
  34.     function pkcs5_unpad($text) { 
  35.         $pad = ord ( $text {strlen ( $text ) - 1} ); 
  36.         if ($pad > strlen ( $text )) { 
  37.             return false; 
  38.         } 
  39.         if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad) { 
  40.             return false; 
  41.         } 
  42.         return substr ( $text, 0, - 1 * $pad ); 
  43.     } 
  44.     function PaddingPKCS7($data) { 
  45.         $block_size = mcrypt_get_block_size ( MCRYPT_3DES, MCRYPT_MODE_CBC ); 
  46.         $padding_char = $block_size - (strlen ( $data ) % $block_size); 
  47.         $data .str_repeat ( chr ( $padding_char ), $padding_char ); 
  48.         return $data; 
  49.     } 
  50.  
  51. $rep = new Crypt3Des (); // 初始化一个对象 
  52. $input = "hello worldfdfdfdfdd"
  53. echo "原文:" . $input . "<br/>"; 
  54. $encrypt_card = $rep->encrypt ( $input ); 
  55. echo "加密:" . $encrypt_card . "<br/>"; 
  56. echo "解密:" . $rep->decrypt ( $rep->encrypt ( $input ) ); 
  57.  
  58. ?> 

因为工作中要用到加密,接口中要求也是用密文传输数据,用到3des加密,就研究了一下。

在网上也找了好多,但是都不可以用,没法正式运行,终于找到一个可以运行的,自己又修改了一下,记录下来,以后还可能会用到。
下面安装我要调用的接口文实例:

在调用PHP中的mcrypt_get_block_size()函数时需要:

启用Mcrypt函数集。linux下要安装libmcrypt,windows下找到php.ini文件里

extension=php_mcrypt.dll

extension=php_mcrypt_filter.dll
接口要求:
先用3DES对数据进行加密,在用BASE64进行加密。即:BASE64(3DES(value))

热门文章推荐

请稍候...