Java & PHP 对称加密 (DES)

标签 java php encryption des

我需要在我的 Java 客户端应用程序和 PHP 服务器之间进行基本/简单的字符串加密(即低安全性就足够了,我只是想避免通信是人类可读的)。

因此我选择了对称 DES 加密,因为它不需要任何 key 交换(相同的 key 将在客户端和服务器上使用)+ 它不需要为更长的 key 更新 Java 安全策略。 当数据通过 Http post 发送时,我还对 Base64 进行编码/解码。

不幸的是,我的代码不起作用,因为解密的文本与输入不匹配。

我要加密的 Java 代码:

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
DESKeySpec keySpecEncrypt = new DESKeySpec(ParamsProvider.SERVER_ECRYPTION_SECRETKEY2); //Secret key is a byte[8] = {1, 2, 3, 4, 5, 6, 7, 8}
SecretKey keyEncrypt = keyFactory.generateSecret(keySpecEncrypt);

// Create the cipher 
Cipher desCipher = Cipher.getInstance("DES/CFB8/NoPadding");

// Initialize the cipher for encryption
desCipher.init(Cipher.ENCRYPT_MODE, keyEncrypt);

// Encrypt the text
byte[] textEncrypted = desCipher.doFinal(data.getBytes("UTF-8"));

//B64 encoding and return
byte[] encryptedB64ByteArray = (new org.apache.commons.codec.binary.Base64()).encode(textEncrypted);
return new String(encryptedB64ByteArray, "UTF8");

我要解密的 PHP 代码:

function decrypt($message) {
    $secret_key = array(1, 2, 3, 4, 5, 6, 7, 8);
    $decodedMsg = base64_decode($message);
    return base64_decode(mcrypt_decrypt(MCRYPT_DES, $key, $decodedMsg, MCRYPT_MODE_CFB));
}

我最好的猜测是我的 Java 和 PHP 加密/解密参数不相等(例如 CFB8 模式),但我不知道如何解决这个问题。

任何帮助或提示将不胜感激(我已经为此浪费了几个小时), 干杯, 托马斯

最佳答案

感谢您的提示。

不幸的是,没有一个适合我。

我终于根据这段代码解决了: https://github.com/stevenholder/PHP-Java-AES-Encrypt

干杯, 托马斯

关于Java & PHP 对称加密 (DES),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15901740/

相关文章:

php - 保护 Cookie 和 session

C# WPF 加密

encryption - 为什么不能加密洪流流量?

java - 在 Weblogic 12.1.3 上部署 Jersey 应用程序

java - 列结果不符合预期

java - JPA @MapsId 与 @JoinColumn(可更新=假,可插入=假)

Java异常: unknown protocol: udp

php - 插入具有与现有行相关的值的新行

java - 桌面 Java 和 Web 应用程序之间的通信,例如。 PHP

javascript - 安全用户身份验证脚本 Electron