我在我的 android 应用程序中遇到了 AES 解密的问题。我已经搜索了很多但无法获得解决方案。
这是步骤,我在做什么。
- 用我的密钥加密信用卡号发送到 Web 服务器。
- Web 服务器 解密信用卡号并保存。
- 当我们从 Web 服务获取信用卡号时。
- 然后网络服务器用相同的密钥加密信用卡号并发送给我们。
- 现在当我们解密这个号码时,它会为一些信用卡号码信息抛出错误的填充异常。
来自服务器的加密信息也不相同,我们以加密格式发送的信息。而在 iPhone 应用程序中也是如此,并且 iPhone 能够成功解密信息。
我正在使用以下代码进行加密和解密。
public class AES256Cipher {
public static byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
public static String AES_Encode(String str, String key) throws java.io.UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
byte[] textBytes = str.getBytes("UTF-8");
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes);
SecretKeySpec newKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = null;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec);
return Base64.encodeToString(cipher.doFinal(textBytes), 0);
}
public static String AES_Decode(String str, String key) throws java.io.UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
byte[] textBytes =Base64.decode(str,0);
//byte[] textBytes = str.getBytes("UTF-8");
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes);
SecretKeySpec newKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec);
return new String(cipher.doFinal(textBytes), "UTF-8");
}
请建议。
编辑: 我还有一件事,它适用于 < 16 位数的信息。当我们放入 16 位信息时,它在解密时抛出异常。