PHP实现DES/ECB/PKCS5Padding加密兼容Java SHA1PRNG算法
在使用php调用java接口时,遇到了两边加密结果不一致的问题。经过沟通发现接口方使用了SHA1PRNG算法,对原密码计算后做为Des的加密Key。
因此在php中也需要先对原密码做相应计算才能保持结果一致。
java加密
public static final String ALGORITHM = "DES";
public static final String TRANSFORMATION = "DES/ECB/PKCS5Padding"; public static String encrypt(String contents, String password) throws Exception {
try
{
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.ENCRYPT_MODE, generateKey(password));
byte[] output = cipher.doFinal(contents.getBytes("utf-8"));
return new String(Base64.encodeBase64(output), "utf-8");
}
catch (Exception e)
{
logger.error("加密失败:{}",e);
} return null; } public static Key generateKey(String password) throws Exception {
return generateKey(password.getBytes());
} public static Key generateKey(byte[] seed) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(seed);
keyGenerator.init(56,secureRandom);
Key key = keyGenerator.generateKey();
return key;
}
php加密
$key = "012345";
$data = "1866666345";
$key = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);
$out = openssl_encrypt($data, 'DES-ECB', $key, OPENSSL_RAW_DATA);
echo base64_encode($out);
参考资料
https://www.cnblogs.com/qdpurple/p/10270593.html
https://blog.csdn.net/ranlv91/article/details/81916654
PHP实现DES/ECB/PKCS5Padding加密兼容Java SHA1PRNG算法的更多相关文章
- iOS DES ECB 模式加密
//iOS DES ECB 模式加密 #import <CommonCrypto/CommonCryptor.h> ,,,,,,,}; +(NSString *) encryptUseDE ...
- java/php DES/CBC/PKCS5Padding加密解密算法实现过程
先看java代码 public static String encrypt(String message, String key) throws Exception { Cipher cipher = ...
- .NET和JAVA中BYTE的区别以及JAVA中“DES/CBC/PKCS5PADDING” 加密解密在.NET中的实现
场景:java 作为客户端调用已有的一个.net写的server的webservice,输入string,返回字节数组. 问题:返回的值不是自己想要的,跟.net客户端直接调用总是有差距 分析:平台不 ...
- C# DES (ECB模式) 加密解密 --单倍长
加密: 调用时: Encrypt_DES16("2AF349243535BCD3", "1111111111111111"); public static s ...
- 利用DES,C#加密,Java解密代码
//C#加密 /// <summary> /// 进行DES加密. /// </summary> /// <param name="pToEncrypt&quo ...
- php 3des加密 兼容JAVA 多么痛的领悟呀
最近和别人做接口用到SOCKET TCP/IP方式 其中需要对账号和密码进行3DES加密 对方提供了一个加密比对的软件和JAVA的实现代码 并且给了我们一个长度为32位的密钥 这边需要用PHP来实现! ...
- Android DES加密的CBC模式加密解密和ECB模式加密解密
DES加密共有四种模式:电子密码本模式(ECB).加密分组链接模式(CBC).加密反馈模式(CFB)和输出反馈模式(OFB). CBC模式加密: import java.security.Key; i ...
- OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果同样
问题说明: 近期用到DES加密,而且要与java的Cipher类加密的结果保持一致.没研究过java的Cliper,但工作中Cipher依据DES/CBC/PKCS5Padding加密方式生成了一个字 ...
- DES对称加密算法实现:Java,C#,Golang,Python
数据加密标准(DES,Data Encryption Standard,简写DES)是一种采用块密码加密的对称密钥算法,加密分组长度为64位,其中8.16.24.32.40.48.56.64 等8位是 ...
随机推荐
- 修改服务器时间以后 cookie无法保存
修改了服务器时间以后发现,cookie无法保存.通过查看异步请求的响应头信息 Date是之前修改的信息,并不是当前的时间. header('Date: Mon, 17 Mar 2015 05:34: ...
- 高级UI-滤镜和颜色通道
滤镜在图片处理里面有很多的运用,尤其是相机使用了大量的滤镜,通过对颜色通道的调和,可以呈现出各种各样的效果 对图像进行一定的过滤加工处理,使用Paint设置滤镜效果 很多高级UI使用时候需要关闭硬件加 ...
- Qt deletelater函数分析(1)
生活的全部意义在于无穷地探索尚未知道的东西,在于不断地增加更多的知识.--左拉 该函数是QObject类的函数: ---- ...
- react中使用typescript时,error: Property 'setState' does not exist on type 'Home'
问题描述: 我在react中用typescript时,定义一个Home组件,然后在组件里用setState时会有这样一个报错:(如图)Property 'setState' does not exis ...
- python基础 — random库
python中用于生成伪随机数的函数库是random 因为是标准库,使用时候只需要import random random库包含两类函数,常用的共8个 --基本随机函数: seed(), random ...
- 平衡二叉树,B树,B+树的概念及区别
1.平衡二叉树 由来:平衡二叉树是基于二分法的策略提高数据的查找速度的二叉树的数据结构 特点: 1.二叉树:意思是每个节点最多只能有两个子节点 2.平衡:因为平衡二叉树的查询性能与树的高度成正比, ...
- Linux进程间通信—使用共享内存
Linux进程间通信-使用共享内存 转自: https://blog.csdn.net/ljianhui/article/details/10253345 下面将讲解进程间通信的另一种方式,使用共享内 ...
- easy ui 常用控件配置
table comboBox 下拉高度 panelHeight:'auto' textBox
- 有状态的bean和无状态的bean的区别
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一个初 ...
- tensorflow 单机多GPU训练时间比单卡更慢/没有很大时间上提升
使用tensorflow model库里的cifar10 多gpu训练时,最后测试发现时间并没有减少,反而更慢 参考以下两个链接 https://github.com/keras-team/keras ...