背景

对方系统java des 加密, 我们用 php 解密

模式基本介绍

ECB模式:电子密本方式,JAVA封装的DES算法的默认模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,则补足8个字节
CBC模式:密文分组链接方式,NET封装的DES算法的默认模式,复杂,加密步骤百度就有

java 代码

import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.DES;
import javax.crypto.SecretKey;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm; public class Hello {
public static void main(String[] args) {
String appSecret = "HgQX9h6XD9fVq__eojuMcfuSmnwC3FqIpxz_YOl38rI";
String value = "待加密字符"; SecretKey secretKey = SecureUtil.generateDESKey(SymmetricAlgorithm.DES.getValue(),appSecret.getBytes());
//构建
DES des = SecureUtil.des(secretKey.getEncoded()); //加密
String encryptHexField = des.encryptHex(value);
String base = des.encryptBase64(value);
System.out.println("16进制密文:" + encryptHexField);
System.out.println("base64密文:" + base);
}
}

分析

  • java DES (默认DES/ECB/PKCS5Padding)
  • php des-ecb ,加密算法列表 openssl_get_cipher_methods()

php 代码

    /**
* 16进制转字符串
* @param string $hex
* @return string
*/
public function hexToStr(string $hex)
{
$string = "";
for ($i = 0; $i < strlen($hex) - 1; $i += 2)
$string .= chr(hexdec($hex[$i] . $hex[$i + 1]));
return $string;
} /**
* 解密
* @param string $str
* @param string $key
* @return string
*/
public function desDecrypt(string $str, string $key)
{
$base64 = base64_encode($this->hexToStr($str));
return openssl_decrypt($base64, 'des-ecb', $key);
}

备注:

openssl_decrypt函数  options 参数官文文档有漏: 0(默认),OPENSSL_RAW_DATA, OPENSSL_ZERO_PADDING, OPENSSL_NO_PADDING,看源码还有一些值没有列出, 暂时没用到

测试工具 http://tool.chacuo.net/cryptdes

参考文档 https://www.php.net/manual/zh/function.openssl-decrypt.php
参考文档 https://www.javajike.com/book/hutool/chapter8/c376fd86c904a3c20175464e2fb6bbec.html
参考文档 https://www.cnblogs.com/jingxiaoniu/p/12217789.html

最新文章

  1. MVVM中数据验证之 ViewModel vs. Model
  2. Framework4.5语法糖 异步Task
  3. PHP那些非常有用却鲜有人知的函数
  4. 快消品销售管理系统,PDA销售管理系统,销售拜访PDA,进销存管理PDA系统 移动扫描打印开单POS
  5. visual studio code + Nodejs + Typescritpt + angularjs2 + bootstrap 环境搭建/Elementary os
  6. Zabbix探索:LDAP的认证方式
  7. 安卓扫码:简单的ZXing使用记录
  8. SEO的URL如何优化才是最佳
  9. JS CSS 网页 简单 右侧 悬浮
  10. jquery之ajax中国乱码的解决方案
  11. Android 友盟分享详细集成过程及所遇问题解决
  12. .net 利用Emit将object转为DbParameter,DataTable转为List&lt;&gt;
  13. (数字IC)低功耗设计入门(八)——物理级低功耗设计&amp;to be continued?
  14. ACM算法竞赛:抄课文
  15. Excel提取字符串示例
  16. Ubuntu18.04下安装搜狗输入法
  17. Taskctl安装及配置Kettle插件
  18. LabVIEW(八):程序结构中的循环结构
  19. 【SPFA与Dijkstra的对比】CDOJ 1961 咸鱼睡觉觉【差分约束-负权最短路径SPFA】
  20. Elasticsearch学习笔记——常用命令

热门文章

  1. 浅谈Redis与分布式锁
  2. 洛谷 P5721 【入门3】循环结构
  3. List集合增删元素时,UnsupportedOperationException报错问题
  4. Android Studio打开现有的项目,Android自带的类、函数(方法)属性等爆红,含解决方式
  5. Joseph Problem With Passwords In Java
  6. laravel 导入导出(实际上还是php代码实现)
  7. 动画图解 Git 的 10 大命令
  8. Oracle 用户创建,权限授予
  9. pg的json类型
  10. iOS开发--APP性能检测方案汇总