Java 通过Security.addProvider()和Cipher.getInstance()指定提供程序是否多余?

Java 通过Security.addProvider()和Cipher.getInstance()指定提供程序是否多余?,java,cryptography,bouncycastle,Java,Cryptography,Bouncycastle,我觉得Security.addProvider(新的BouncyCastleProvider())应该不需要执行Cipher Cipher=Cipher.getInstance(“RSA/ECB/PKCS1Padding”,“BC”)。只有在尚未执行Security.addProvider(new BouncyCastleProvider())时,才应指定Cipher.getInstance的第二个参数。这是正确的评估吗?否。当您添加提供商时,您可能正在为RSA/ECB/PKCS1PANDING

我觉得
Security.addProvider(新的BouncyCastleProvider())
应该不需要执行
Cipher Cipher=Cipher.getInstance(“RSA/ECB/PKCS1Padding”,“BC”)
。只有在尚未执行
Security.addProvider(new BouncyCastleProvider())
时,才应指定
Cipher.getInstance
的第二个参数。这是正确的评估吗?

否。当您添加提供商时,您可能正在为RSA/ECB/PKCS1PANDING添加一个源,因此您需要指定哪个源。特别是,
Security.addProvider
添加到列表的末尾,并且99.9999%的时间
SunJCE
将在列表的前面,将为省略第二个参数的调用选择和。请注意,
String
第二个参数的重载仅适用于列表中的提供者(但不一定是第一个),而
Provider
第二个参数的重载适用于列表中的提供者;我必须说,关于stackoverflow的大多数问题,使用JCAAPI并指定一个提供者,都是基于错误的假设。指定特定的提供者显然会降低可移植性。仅当某个提供程序必须具有唯一性时,才应指定该提供程序。例如,一个特定的提供者可能支持更安全的硬件,可能有一个无侧通道的实现,可能更快,或者可能不会出现Oracle/OpenJDK提供者所存在的错误。