java.security.NoSuchAlgorithmException:找不到任何支持AES/ECB/PKCS7PADDING的提供程序

Sub*_*Lee 22 java security encryption jce aes

我试图使用AES算法加密数据.但是,发生了以下异常.

java.security.NoSuchAlgorithmException:
    Cannot find any provider supporting AES/ECB/PKCS7PADDING
Run Code Online (Sandbox Code Playgroud)

有人知道这个问题的解决方案吗?我的JDK版本是1.7.

小智 36

您不希望为块密码使用指定PKCS#7填充.您想指定PKCS#5填充.PKCS#5指定用于块密码,而PKCS#7不用(它用于S/MIME中的不同位置).我将指出PKCS#5和PKCS#7实际上指定了完全相同类型的填充(它们是相同的!),但在此上下文中使用它时称为#5.:)

所以,而不是"AES/ECB/PKCS7PADDING",你想要的"AES/ECB/PKCS5PADDING".这是一个密码实现,需要Java平台的每个实现都支持.有关更多详细信息,请参阅该类文档Cipher.

  • 这个答案没问题,但有点令人困惑,因为你**想要使用PKCS#7填充作为分组密码.根据[标准算法名称],它只是'PKCS7Padding`是错误的名称.(http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Cipher)PKCS #7使用此填充方案填充使用分组密码加密的消息.大背景是什么并不重要. (4认同)
  • 正确.它没有(好吧,因为#5和#7是相同的填充...我想你可以说它呢?).而且,欢迎你.如果您对此感到满意,请记住接受答案.:) (2认同)
  • 并且为了增加混乱,.NET调用完全相同的填充算法[PKCS7 padding](http://msdn.microsoft.com/en-us/library/system.security.cryptography.paddingmode.aspx). (2认同)
  • 虽然Java认为PKCS5和PKCS7填充是"相同的"(并且应该始终使用字符串"AES/CBC/PKCS5Padding",因为"AES/CBC/PKCS7Padding"将在使用以下方法初始化AES块密码时引发NoSuchAlgorithmException Java加密API),我认为这在Java平台中是一个严重的错误,因为这些填充的纯技术定义是不一样的.PKCS5明确地将其块大小定义为严格的8字节,而PKCS7定义为块大小从1到255(块大小为8字节与PKCS5相同). (2认同)