Tôi đang thử nghiệm bật FIPS 180-3 trên ứng dụng java của mình. FIPS 180-3 chỉ cho phép sử dụng 5 [băm] an toàn (http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf), MD5 không phải là một trong số chúng. Do đó tôi đang cố gắng để loại bỏ chương trình thuật toán MD5 từ nhà cung cấp Sun. Đây là mã mẫu.Tại sao MD5 là bắt buộc để khởi tạo JCE
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");
}
Nhưng điều này là ném ngoại lệ sau. Nếu bạn bình luận "sun.remove (.." chương trình hoạt động tốt. Nếu tôi xóa MD2, thay vì MD5 thì nó cũng hoạt động tốt.
Với tôi có vẻ như các thư viện jre đang sử dụng MD5 để ký, nhưng i kiểm tra jre/lib/ext/người ký sunjce_provider.jar và sử dụng sha1 của nó.
Bất cứ ý tưởng tại sao mã của tôi là không có lỗi này?
Exception in thread "main" java.lang.ExceptionInInitializerError tại javax .crypto.Cipher.getInstance (DashoA13 * ..) tại TestRemoveMD5.main (TestRemoveMD5.java:20)
Nguyên nhân: java.lang.SecurityException:. Không thể thiết lập Certs cho tin cậy CA tại javax.crypto.SunJCE_b (DashoA13 * ..) ... thêm 3
Nguyên nhân: java.lang.SecurityException: Các lớp chữ ký đã bị giả mạo với số tại javax.crypto.SunJCE_b.d (DashoA13 * ..) tại javax.crypto.SunJCE_b.c (DashoA13 * ..) tại javax.crypto.SunJCE_b $ 1.run (DashoA13 *. .) tại java.security.AccessController.doPrivileged (Phương pháp Gốc) ... 4 thêm
Bạn đã xóa tất cả chứng chỉ từ cửa hàng tin cậy JRE sử dụng hàm băm MD5 chưa? – Robert
Tôi đang sử dụng một jdk mới 1.6 –
Sau đó, bạn phải xóa chứng chỉ đã từng sử dụng MD5 khỏi kho lưu trữ tin cậy của JRE. – Robert