java.security.NoSuchAlgorithmException:找不到任何配套商AES

2019-06-23 17:28发布

我试图使用AES算法加密数据。 然而,发生以下情况例外。

java.security.NoSuchAlgorithmException:
    Cannot find any provider supporting AES/ECB/PKCS7PADDING

有人知道解决这个问题? 我的JDK的版本为1.7。

Answer 1:

你不想指定PKCS#7填充块密码使用。 要指定PKCS#5填充。 PKCS#5被用于块密码使用指定而PKCS#7是不(对于不同的地方它的用途等在S / MIME)。 我要指出的是PKCS#5和PKCS#7实际上指定完全相同的类型的填充(它们都是一样的!),但在这种情况下使用时,它被称为#5。 :)

因此,而不是"AES/ECB/PKCS7PADDING"想要"AES/ECB/PKCS5PADDING" 这是一个Java平台的每一种实现需要支持的加密实现。 查看该文件的Cipher类的更多细节。



Answer 2:

对于包括PKCS#5和PKCS#7加密标准文本中的问题的一个非常全面的解释,请看看这里 。


PKCS#5填补装置填充1至8个字节。 填充字节本身包含的编码为一个字节的填充字节的数量。 PKCS#5填充物为DES指定,但将是适合于与8个字节的块大小的任何块密码。

现在DES规格,甚至相当长一段时间的PKCS#5规范的基于密码加密之前和Java的。 AES只规范于2002年,Java和连渣2推出后不久。 所以,(三人间)DES和PKCS#5填充被集成到Java AES作出了出现之前。

当Java的 - 或者更确切地说,是Sun JCE提供 - 获得AES功能,它需要16个字节的块大小的填充方法。 PKCS#7指定了该填补方法那是相同的PKCS#5填充 ,不同之处在于它是为2至255个字节的块大小(一个字节的最高值,如果它编码一种基于零的无符号整数)中所定义。 然而,填充方法已经在那里了; 它被命名为"PKCS5Padding" 。 因此,而不是引入新的名字, "PKCS5Padding"被简单地重新使用。

现在太阳提供商应该真正支持"PKCS7Padding"作为PKCS#5填充简直是不正确。 这不只是一个Java命名问题,这对于那些试图实现加密协议或端口的其它应用程序到Java开发人员的任何一个问题。 现在然而,你应该使用"PKCS5Padding" ,而不是"PKCS7Padding"



Answer 3:

如果你想使用AES / ECB / PKCS7Padding然后充气城堡将支持HT TP://www.bouncycastle.org/specifications.html



文章来源: java.security.NoSuchAlgorithmException:Cannot find any provider supporting AES/ECB/PKCS7PADDING