我正在尝试在我的 java 应用程序上启用 FIPS 180-3。FIPS 180-3 只允许使用 5 个安全 [哈希] (http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf),MD5 不是其中之一。因此,我试图以编程方式从 Sun 提供程序中删除 MD5 算法。这是示例代码。
public static void main(String[] args) throws Exception {
Security.removeProvider("SUN");
Sun sun = new Sun();
sun.remove("MessageDigest.MD5"); //Comment and it will work !!!
Security.addProvider(sun);
Cipher ciph = Cipher.getInstance("AES");
}
但这会引发以下异常。如果您评论“sun.remove(..”该程序可以正常工作。如果我删除 MD2,而不是 MD5,那么它也可以正常工作。
在我看来,jre 库似乎使用 MD5 进行签名,但我检查了 jre/lib/ext/sunjce_provider.jar 签名者及其使用 sha1。
知道为什么我的代码因此错误而失败吗?
TestRemoveMD5.main(TestRemoveMD5.java:20) 的 javax.crypto.Cipher.getInstance(DashoA13*..) 的线程“主”java.lang.ExceptionInInitializerError 中的异常
原因:java.lang.SecurityException:无法在 javax.crypto.SunJCE_b.(DashoA13*..) 上为受信任的 CA 设置证书 ... 3 更多
原因:java.lang.SecurityException:签名类已在 javax.crypto.SunJCE_b$1 的 javax.crypto.SunJCE_b.c(DashoA13*..) 的 javax.crypto.SunJCE_b.d(DashoA13*..) 处被篡改.run(DashoA13*..) at java.security.AccessController.doPrivileged(Native Method) ... 还有 4 个