2021-10-21 16:29 php分享 80 梁俊威
项目中接入第三方支付遇到3DES加密,以前也没用过,搜了好多,都不适用,各种不对,后来自己结合搜到的终于弄正确了。文末有附件下载
<?php class Des { /** * @param string $crypt 需要加密的字符串 * @param string $key 加密使用的密钥 * @param string $vi 加密使用的向量 * @return string $crypt 加密后的字符串 * @des 3DES加密 */ final static public function encrypt($input, $key, $iv, $base64 = true) { $size = 8; $input = self::pkcs5_pad($input, $size); $encryption_descriptor = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', ''); mcrypt_generic_init($encryption_descriptor, $key, $iv); $data = mcrypt_generic($encryption_descriptor, $input); mcrypt_generic_deinit($encryption_descriptor); mcrypt_module_close($encryption_descriptor); return base64_encode($data); } /** * @param string $crypt 需要解密的字符串 * @param string $key 加密使用的密钥 * @param string $vi 加密使用的向量 * @return string $input 解密后的字符串 * @des 3DES解密 */ final static public function decrypt($crypt, $key, $iv, $base64 = true) { $crypt = base64_decode($crypt); $encryption_descriptor = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', ''); mcrypt_generic_init($encryption_descriptor, $key, $iv); $decrypted_data = mdecrypt_generic($encryption_descriptor, $crypt); mcrypt_generic_deinit($encryption_descriptor); mcrypt_module_close($encryption_descriptor); $decrypted_data = self::pkcs5_unpad($decrypted_data); return rtrim($decrypted_data); } final static private function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } final static private function pkcs5_unpad($text) { $pad = ord($text{strlen($text) - 1}); if ($pad > strlen($text)){ return false; } return substr($text, 0, -1 * $pad); } } 调用测试 $plaintext = "3DES加密测试"; $key = "r0uScmDuH5FLO37AJV2FN72J";// 加密所需的密钥 $iv = "1eX24DCe";// 初始化向量 $ciphertext = Des::encrypt($plaintext, $key, $iv);//加密 $plaintext2 = Des::decrypt($ciphertext, $key, $iv);//解密 echo "<b>String:</b> $plaintext <br><br>"; echo "<b>Encrypted:</b>"; echo $ciphertext; echo"<br><br><b>Decrypt:</b> "; echo $plaintext2;
本站提供的所有资源文件禁止用于一切违法、商业行为,若发生一切后果均由下载人员承担。
本文附件:3Des.zip [ 点我下载 ]
若无特殊说明,本站点所有内容均为原创,转载请说明出处!