我的目标是加密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