PHP 3DES 加解密(CBC模式,pkcs5padding填充)


1、前言:項目中接入第三方支付遇到3DES加密,以前也沒用過,搜了好多,都不適用,各種不對,后來自己結合搜到的終於弄正確了,檢測地址:http://tool.chacuo.net/crypt3des。

2、下面是類 適用(CBC加密模式,pkcs5padding填充

 代碼:

 1 /**
 2 * @des 3DES加密算法,cbc模式,pkcs5Padding字符填充方式
 3 */
 4 
 5 class TDEA
 6 {
 7   /**
 8   * @param string $crypt 需要加密的字符串
 9   * @param string $key 加密使用的密鑰
10   * @param string $vi 加密使用的向量
11   * @return string $crypt 加密后的字符串
12   * @des 3DES加密
13   */
14   final static public function encrypt($input, $key, $iv, $base64 = true) {
15     $size = 8;
16     $input = self::pkcs5_pad($input, $size);
17     $encryption_descriptor = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', '');
18     mcrypt_generic_init($encryption_descriptor, $key, $iv);
19     $data = mcrypt_generic($encryption_descriptor, $input);
20     mcrypt_generic_deinit($encryption_descriptor);
21     mcrypt_module_close($encryption_descriptor);
22     return base64_encode($data);
23   }
24   /**
25   * @param string $crypt 需要解密的字符串
26   * @param string $key 加密使用的密鑰
27   * @param string $vi 加密使用的向量
28   * @return string $input 解密后的字符串
29   * @des 3DES解密
30   */
31   final static public function decrypt($crypt, $key, $iv, $base64 = true) {
32     $crypt = base64_decode($crypt);
33     $encryption_descriptor = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', '');
34     mcrypt_generic_init($encryption_descriptor, $key, $iv);
35     $decrypted_data = mdecrypt_generic($encryption_descriptor, $crypt);
36     mcrypt_generic_deinit($encryption_descriptor);
37     mcrypt_module_close($encryption_descriptor);
38     $decrypted_data = self::pkcs5_unpad($decrypted_data);
39     return rtrim($decrypted_data);
40   }
41 
42   final static private function pkcs5_pad($text, $blocksize) {
43     $pad = $blocksize - (strlen($text) % $blocksize);
44     return $text . str_repeat(chr($pad), $pad);
45   }
46   final static private function pkcs5_unpad($text) {
47     $pad = ord($text{strlen($text) - 1});
48     if ($pad > strlen($text)){
49       return false;
50     }
51     return substr($text, 0, -1 * $pad);
52   }
53 }
54 
55 
56 調用測試
57 
58 $plaintext = "3DES加密測試";
59 $key = "r0uScmDuH5FLO37AJV2FN72J";// 加密所需的密鑰
60 $iv = "1eX24DCe";// 初始化向量
61 $ciphertext = TDEA::encrypt($plaintext, $key, $iv);//加密
62 $plaintext2 = TDEA::decrypt($ciphertext, $key, $iv);//解密
63 
64 
65 echo "<b>String:</b> $plaintext <br><br>";
66 echo "<b>Encrypted:</b>";
67 echo $ciphertext;
68 echo"<br><br><b>Decrypt:</b> ";
69 echo $plaintext2;

 

檢測地址:http://tool.chacuo.net/crypt3des

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM