2015-07-01 48 views
0

试图解密的数据作为加密的AES-128与String键 “keykeykeykeykey1”爪哇AES 128解密用String键BadPaddingException

代码字节数组:

byte[] dataBytes = new byte []{(byte)0xf3,(byte)0x8b,(byte)0x0c,(byte)0xb3,(byte)0xa3,(byte)0x26,(byte)0x12,(byte)0x23,(byte)0xe0,(byte)0xe0,(byte)0x9f,(byte)0x1f,(byte)0x28,(byte)0x01,(byte)0x28,(byte)0x35}; 
SecretKeySpec secretKeySpec = new SecretKeySpec("keykeykeykeykey1".getBytes("UTF-8"), "AES"); 
Cipher cipher = Cipher.getInstance("AES"); 
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); 
byte[] decryptedData = cipher.doFinal(dataBytes); //this line throws exception 

给我BadPaddingException。我错过了什么?

+0

哪一行给你一个BadPaddingException? –

+0

decryptedData = cipher.doFinal(dataBytes); –

+0

在尝试解密之前,您必须知道它是如何加密的。什么是操作模式(ECB,CBC,...)?什么是填充(无,零,PKCS#7,...)?从“key”(简单解码,MD5,SHA256,PBKDF2,...)派生的实际密钥是怎样的?关键大小和块大小是什么?如何布置密文(IV包括在前面或后面,auth标签包括f或b)? –

回答

2

您不指定密码算法中的模式或填充。您需要确定数据加密时使用的值。

当您将算法更改为“AES/ECB/NOPADDING”时,没有错误,但这可能不一定是正确的模式或填充。

+0

像[this]这样的在线工具(http://aes.online-domain-tools.com/)给了我正确的解密,你是对的。谢谢。 –