我需要有一個基本的/簡單的字符串加密(即低安全性不夠好,我只是想避免這種通信是人類可讀)我的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