【问题标题】:Java AES 128 decryption with String key BadPaddingException使用字符串密钥 BadPaddingException 进行 Java AES 128 解密
【发布时间】:2015-07-01 11:07:47
【问题描述】:

尝试将数据解密为使用 AES-128 加密的字节数组,字符串密钥为“keykeykeykeykey1”

代码:

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。我错过了什么?

【问题讨论】:

  • 哪一行给你BadPaddingException
  • decryptedData = cipher.doFinal(dataBytes);
  • 在尝试解密之前,您必须知道它是如何加密的。什么是操作模式(ECB,CBC,...)?什么是填充(无、零、PKCS#7、...)?实际密钥是如何从key 派生的(简单解码、MD5、SHA256、PBKDF2...)?什么是密钥大小和块大小?密文如何布局(IV包含在前面或后面,auth标签包含f或b)?
  • 我只知道来自 GPS 跟踪器、加密密钥和算法的二进制数据。

标签: java encryption aes


【解决方案1】:

您没有在密码算法中指定模式或填充。您需要确定在对数据进行加密时使用了哪些值。

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

【讨论】:

  • this 这样的在线工具给了我正确的解密,你是对的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
  • 2011-09-26
  • 2020-11-13
  • 1970-01-01
相关资源
最近更新 更多