PHP 3DES 加解密(CBC模式,pkcs5padding填充)详解编程语言

本文章主要介绍了PHP 3DES 加解密(CBC模式,pkcs5padding填充),具有不错的的参考价值,希望对您有所帮助,如解说有误或未考虑完全的地方,请您留言指出,谢谢!

1、前言:项目中接入第三方支付遇到3DES加密,以前也没用过,搜了好多,都不适用,各种不对,后来自己结合搜到的终于弄正确了,检测地址:http://tool.chacuo.net/crypt3des。

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

PHP 3DES 加解密(CBC模式,pkcs5padding填充)详解编程语言

PHP 3DES 加解密(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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/228246.html

(0)
上一篇 2022年1月11日
下一篇 2022年1月11日

相关推荐

发表回复

登录后才能评论