我需要有一个基本的/简单的字符串加密(即低安全性不够好,我只是想避免这种通信是人类可读)我的Java客户端应用程序和PHP服务器之间。Java和PHP对称加密(DES)
我因此选择了对称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 /解密参数是不相等的(如CFB8模式)但我不知道如何解决这个问题。
任何帮助或提示将不胜感激(我已经失去了在这一个几个小时), 干杯, 托马斯
我在这里猜测,但在java端加密,然后b64。在PHP上你解密然后解密b64。我认为,在PHP端你首先要做的decryptb64,然后解密步骤 – ITroubs 2013-04-09 12:29:12
找到[这里](http://stackoverflow.com/questions/8530312/php-equivalent-for-java-triple-des-encryption - 解密),这可能会帮助你开始。 Java在这个问题中,PHP在答案中相当于。 – Jon 2013-04-09 12:30:10