我的目標是加密Iphone中的數據並在java服務器上解密它。加密/解密 - iphone到java - BadPaddingException:給定最後的塊沒有正確填充
我正在使用對稱加密。
我已經在java端使用KeyGenerator生成了密鑰。生成密鑰
代碼如下:
// Java代碼密鑰生成
File keyFile = new File("F:/key","mykey.key");
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
SecretKey skey = kgen.generateKey();
byte[] enc= skey.getEncoded();
FileUtils.writeStringToFile(keyFile ,Base64.encodeBase64String(enc),"UTF-8");
以下是用於解密的Java代碼:
//從文件中獲取關鍵
File file = new File("F:/key", "mykey.key");
SecretKeySpec keySpec= null;
try {
byte[] keyBytes = Base64.decodeBase64(FileUtils.readFileToString(file,"UTF-8"));
keySpec= new SecretKeySpec(keyBytes, 0, 16, "AES");
byte[] raw = keySpec.getEncoded();
} catch (Exception e) {
e.printStackTrace();
}
//解密字符串encryptedString(來自iphone)
byte[] tempByte = Base64.decodeBase64(encryptedString);
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] cipherData = cipher.doFinal(tempByte);
String ttt = new String(cipherData ,"UTF-8");
System.out.println(ttt);
和iPhone的代碼是類似於日在下面給出的鏈接代碼: Encrypting data with Objective-C and decrypt it with Java Problem
我得到以下異常而在Java解密。
javax.crypto.BadPaddingException:鑑於最終塊未正確填充
請幫助...
PKCS5和PKCS7確實兼容。 ECB模式不安全,不應使用,請改用CTR或CBC模式。您的建議明確指定兩端使用的填充是正確的。 – rossum
其實問題在關鍵。我在保存文件時編碼了密鑰。在手機中,我使用編碼密鑰進行加密,而在Java中,我使用原始密鑰進行解密。謝謝你的時間!! – Manish