通常,您应该坚持使用默认提供程序,除非有令人信服的理由不这样做。对您的提供商进行硬编码有一个严重的缺点,即您的代码不允许您在不重写代码的情况下更改提供商。我直接选择提供商的唯一原因是确保满足某些安全约束,这对其他提供商来说是不存在的。
以下段落是 直接来自Oracle文档 :
提醒:由于历史原因和提供的服务类型,JDK中的加密实现通过几个不同的提供程序(“Sun”,“SunJSSE”,“SunJCE”,“SunRsaSign”)进行分发。通用应用程序不应该向特定提供商请求加密服务。那是: getInstance("...", "SunJCE"); // not recommended vs. getInstance("..."); // recommended
提醒:由于历史原因和提供的服务类型,JDK中的加密实现通过几个不同的提供程序(“Sun”,“SunJSSE”,“SunJCE”,“SunRsaSign”)进行分发。通用应用程序不应该向特定提供商请求加密服务。那是:
getInstance("...", "SunJCE"); // not recommended vs. getInstance("..."); // recommended
您仍然可以设法允许使用其他提供商,方法是为其提供更高的优先级(优先级较低的指标,1为最高优先级)。 java.security 文件内 jre/lib/security 运行时的路径。如果要使用指定提供程序 getInstance("Algorithm", "Provider") 使提供程序字符串可配置(例如使用属性和使用)可能是个好主意 myConfig.getProperty("Provider") )。
java.security
jre/lib/security
getInstance("Algorithm", "Provider")
myConfig.getProperty("Provider")