背景

对方系统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

 

posted on 2022-12-08 11:09  allen817  阅读(273)  评论(0编辑  收藏  举报