Java Crypto Api - 如何选择密码提供者

标签 java encryption encryption-asymmetric jce

为了使用 Java 实现加密,我使用了 JCE,它很好玩。 有人告诉我,选择加密提供商比使用默认提供商更好。

我需要为对称 key 生成选择提供商。此代码使用(在 CBC 模式下使用 AES):

 Key sharedKey = (KeyGenerator.getInstance("AES/CBC/PKCS5PADDING", PROVIDER1).generateKey();

对于此代码使用的非对称文本加密(在 ECB 模式下使用 RSA):

Cipher rsaEncryptor = Cipher.getInstance("RSA/ECB/PKCS1Padding",PROVIDER2); 

我的问题是PROVIDER1和PROVIDER2应该如何选择?

例如,我看到“SunJCE”是一个有据可查的供应商,但我认为这不是选择它的“足够好”的理由。

有人吗?

最佳答案

一般来说,除非有令人信服的理由,否则您应该坚持使用默认提供程序。硬编码您的提供者有一个严重的缺点,即您的代码不允许您在不重写代码的情况下更改您的提供者。我认为直接选择供应商的唯一原因是确保满足一些安全限制,而其他供应商则不会。

下面这段是directly from the Oracle documentation :

Reminder: Cryptographic implementations in the JDK are distributed through several different providers ("Sun", "SunJSSE", "SunJCE", "SunRsaSign") for both historical reasons and by the types of services provided. General purpose applications SHOULD NOT request cryptographic services from specific providers. That is:

getInstance("...", "SunJCE");  // not recommended
    vs.
getInstance("...");            // recommended

您仍然可以通过在 jre 的 java.security 文件中为它们赋予更高的优先级(较低优先级指示符,1 是最高优先级)来设法允许使用其他提供程序/lib/security 运行时的路径。如果您想使用 getInstance("Algorithm", "Provider") 指定提供者,最好使提供者字符串可配置(例如,使用属性并使用 myConfig.getProperty( “提供者”))。

关于Java Crypto Api - 如何选择密码提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20581169/

相关文章:

security - RSA:使用多个 key 加密消息

java - 如何使用 #Java Script 或 #XSL 将 2 个 XML 文件合并为一个?

java - Sparkle 将 css 文件视为路由

java - 可复位倒计时闩锁

java - 为什么 Java KeyStore 在加载 OpenPGP key 时失败?

java - 如何将以下 JAVA 加密复制为等效的 NODEJS(使用 node-rsa 或 crypto 模块)?

java - Liferay json网络服务: url access not working?

c# - 非对称TCP加密C#

php - 在不进行处理的情况下在线获取信用卡信息——如何最好地做到这一点?

algorithm - 短消息公钥加密算法