分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

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

发布时间:2023-09-06 01:23责任编辑:沈小雨关键词:PHP

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

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

 代码:

/**
* @des 3DES加密算法,cbc模式,pkcs5Padding字符填充方式
*/

class TDEA
{
???  /**
????  * @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 = TDEA::encrypt($plaintext, $key, $iv);//加密
$plaintext2 = TDEA::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;

检测地址:http://tool.chacuo.net/crypt3des

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

原文地址:http://www.cnblogs.com/yimingwang/p/7807880.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved