繁体   English   中英

Java和PHP对称加密(DES)

[英]Java & PHP symmetric encryption (DES)

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

因此我选择了对称DES加密,因为它不需要任何密钥交换(在客户端和服务器上将使用相同的密钥)+它不需要更长密钥的Java安全策略更新。 我也编码/解码Base64,因为数据是由Http帖子发送的。

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

我的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 en / decryption参数不相等(例如CFB8模式),但我不知道如何解决这个问题。

任何帮助或提示都会非常感激(我已经在这个问题上丢了几个小时),干杯,托马斯

谢谢你的提示。

不幸的是,他们都没有为我效劳。

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

干杯,托马斯

你也选择了一个填充方法,阅读这个使用@Jon链接的php代码你必须选择PKCS#5-padding:

// Create the cipher 
Cipher desCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

我在RSA(java:encryption,php:decryption)的上下文中遇到了同样的问题,通过以下方式解决了我的问题:在keyPair-generation中将'initialize'值从512增加到1024.它可以工作。 我所遵循的提示是: http : //docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html其中指出每个java实现至少必须实现:... RSA / ECB / PKCS1Padding(1024,2048)...所以也许密钥生成的结果不兼容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM