PHP 3DES 加解密(CBC模式,pkcs5padding填充)
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填充)的更多相关文章
- C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式
============================================== des cbc 加密 zeropadding填充方式 ======================= ...
- javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通
我们只知道不同的语言解密要相互通用,就需要遵循相同的加密方式,然而在具体做技术预研的时候,就发现会遇到很多问题,网上找的资料也是比较片面,所以我踩了坑,并且把解决方案和相关资料源码提供出来,给需要的朋 ...
- DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项
DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...
- C# And Java 3DES加解密 ECB模式/PKCS7
c#: /// <summary> /// 完整 /// </summary> public class TripleDESHelper1 { ...
- java 与 c# 3des 加解密
java 与 c# 3des 加解密 主要差异如下: 1. 对于待加密解密的数据,各自的填充模式不一样 C#的模式有:ANSIX923.ISO10126.None.PKCS7.Zero,而Jav ...
- 3DES加解密类
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace GT.C ...
- PHP版3DES加解密类
<?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...
- 3DES加解密【示例】
代码 /** * 3DES加解密 */ public class DESedeUtils { private static final String ALGORITHM_MD5 = &qu ...
- 3DES 加解密
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Comm ...
随机推荐
- FWT公式一览
总表 真值表 对应运算 FWT IFWT A=B=0 A≠B A=B=1 左项 右项 左项 右项 0 0 1 & L+R R L-R R 0 1 0 ^ L+R L-R (L+R)/2 (L- ...
- div里添加元素样式
function YUEFEN() { $(".BBNL_2").click(function () { $(".BBNL_2").css("colo ...
- maven(二),Linux安装maven3.5.3及配置
Linux系统,ubuntu-16.04.4,安装maven3.5.3 一.创建文件夹 注意Linux用户,这个如果不是root用户,命令前面需要加:sudo //创建一个目录 mkdir /usr/ ...
- [unity基础教程]Unity3D实现动态载入游戏资源(转)
用Unity3D制作基于web的网络游戏,不可避免的会用到一个技术-资源动态载入.比方想载入一个大场景的资源,不应该在游戏的開始让用户长时间等待全部资源的载入完成.应该优先载入用户附近的场景资源.在游 ...
- jsp与httpservlet的微小区别
2015-8 jsp与httpservlet的微小区别: jsp默认支持会话,httpservlet默认不支持会话:jsp: 可以直接通过session引用httpservlet对象httpservl ...
- ollvm 新增字符串加密功能
好久没弄ollvm了,可以继续了,今天给ollvm新增了一个pass,用来加密字符串,这个pass是从别的库里面扒出来的. 本文是基于在Windows 上使用VS2017编译出来的ollvm,在这个基 ...
- elasticsearch painless脚本评分
painless是一种新支持的脚本语言,语言格式和java十分类似.可以参考以下文档: painless语言介绍 painless api painless 实例 脚本参数 score_mode计算f ...
- phpredis中incr以及decr等自增命令出现的问题
在做项目中使用redis的incr以及hincrby自增时,出现自增失败,set之后的数据,无法自增,当redis中不存在该key时,直接用incr是成功的.查找了原因,是因为phpredis初始化的 ...
- redis笔记3-命令
通用命令:keys * --查询所有keykeys list* --查询list开头的keytype key1 --查询键对应的value类型del key --删除指定的keyttl key --查 ...
- 生成token
利用中间件生成token 1.安装中间件 npm install jsonwebtoken 2. 使用 Sign() 里面有3个参数,第一个是token里面传递的数据 ,第二个是 key ,第三 ...