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位是 ...
 
随机推荐
- Procedural Mesh Component in C++:Getting Started
			
转自:https://wiki.unrealengine.com/Procedural_Mesh_Component_in_C++:Getting_Started I create a simple ...
 - 学习数据结构Day2
			
之前学习过了数组的静态实现方法,同时将数组的所有有可能实现的方法都统一实现了一遍,之后支持了泛型的相关 概念,接下来就是如何对数组进行扩容的操作也就是实现动态数组. private void resi ...
 - 使用TCP的协议有哪些?使用UDP的协议有哪些?
			
运行于TCP协议之上的协议: HTTP协议:超文本传输协议,用于普通浏览 HTTPS协议:安全超文本传输协议,身披SSL外衣的HTTP协议 FTP协议:文件传输协议,用于文件传输 POP3协议:邮局协 ...
 - java笔记2—函数
			
函数: 1.什么是函数? 函数是定义在类中具有特定功能的一段独立小程序. 函数也称方法. 2.函数的格式: [ 修饰符 ] 返回值类型 函数名(参数类型 形式参数) ...
 - 谈nginx配置
			
近日看<许式伟的架构课>中一段关于系统分解的描述所有思考,略记于此. 原文片段如下: 系统设计,简单来说就是 "对系统进行分解" 的能力.这个阶段核心要干的事情,就是明 ...
 - C++多态性----运算符重载与虚函数
			
一.多态性 ①概述:多态是指同样的消息被不同类型的对象接收时导致的不同行为. ②类型: 可以分为四类:重载多态.强制多态.包含多态.参数多态. ------------------------ --- ...
 - go语言学习笔记----模拟实现文件拷贝函数
			
实例1 //main package main import ( "bufio" "flag" "fmt" "io" & ...
 - Spring Boot异步发送邮件和请求拦截器配置
			
用户登录流程图: 在spring拦截器中进行鉴权操作: 控制器的拦截: import com.mooc.house.common.model.User; import org.springframew ...
 - wpf 对控件进行截图,获取快照
			
有时候我们项目,在执行某个操作后,会生成一些数据结果,如报表一类的东西,我们需要对结果进行保存,甚至是生成word文档. 那么首先获取到控件快照就最基本的条件. 生成快照的静态方法类 using Sy ...
 - C# vb .net实现不透明度调整特效滤镜
			
在.net中,如何简单快捷地实现Photoshop滤镜组中的不透明度调整呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...