当前位置: 首页 > 知识库问答 >
问题:

MD5算法即使在$java_home/lib/security/java.security中禁用后仍能在java中工作

郑宜民
2023-03-14

我禁用了MD5算法,使用在$java_home/lib/security/java.security文件中添加以下内容。但是我仍然能够运行使用MD5算法的代码。

jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer
jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024

但是我仍然能够运行以下使用MD5的代码

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
    public static String getMd5(String input)
    {
        try {

            // Static getInstance method is called with hashing MD5
            MessageDigest md = MessageDigest.getInstance("MD5");

            // digest() method is called to calculate message digest
            // of an input digest() return array of byte
            byte[] messageDigest = md.digest(input.getBytes());

            // Convert byte array into signum representation
            BigInteger no = new BigInteger(1, messageDigest);

            // Convert message digest into hex value
            String hashtext = no.toString(16);
            while (hashtext.length() < 32) {
                hashtext = "0" + hashtext;
            }
            return hashtext;
        }

        // For specifying wrong message digest algorithms
        catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }

    // Driver code
    public static void main(String args[]) throws NoSuchAlgorithmException
    {
        String s = "TESTFORMD%";
        System.out.println("Your HashCode Generated by MD5 is: " + getMd5(s));
    }
}

共有1个答案

沈曜灿
2023-03-14

$java_home/lib/Security/java.Security中配置的安全策略会影响JVM如何处理与安全相关的功能;它与您在代码中显式(尝试)使用的算法无关。

例如:

  • jdk.jar.disabledalgorithms禁用用于验证签名的jar文件的算法
  • jdk.certpath.disabledalgorithings禁用用于证书的算法(也影响密钥lenghs)
  • jdk.TLS.disabledalgorithms禁用用于TLS密码协商的算法
 类似资料:
  • 我在tomcat上配置了ssl,在IE上禁用了tls支持,并启用了ssl支持,但我仍然得到错误消息 Tomcat设置

  • 我已经尝试了一些 bable 设置,tsconfig 中的不同目标/库设置,什么都没有。不知道我还能做什么... 错误如下所示:

  • 问题内容: 我有一个批处理文件,可在Windows 2003服务器中启动Java进程。根据安全策略,如果用户在特定时间段内处于非活动状态,则该计算机的用户将被强制注销。问题在于,当用户注销时,该过程也会终止。 我安排了一个新任务(“控制面板”->“计划任务”),并选择了“计算机启动时”选项,并在那里提供了用户帐户详细信息。但这似乎没有任何效果,用户仍然注销并且该进程终止。是否需要重新启动才能使此更

  • 我得到了这段代码的“javax.net.ssl.SSLException:连接重置” 但仅当在使用Open JDK 14中的jlink构建的Java14 JRE下运行时。如果我指向完整的JDK,代码执行得很好。我怀疑JRE中缺少一些东西,但它是什么,为什么jlink没有复制丢失的文件?我基于jdeps的jlink命令如下: jlink中是否缺少模块?关于如何追踪此事,有什么想法或建议吗? 按照建议

  • 在程序中, 给出错误- 在其他线程之后,我将JDK遵从性级别更改为1.7,还添加了 java.home=/home/user/jdk1.7.0_79/JRE java.library.path=/home/user/jdk1.7.0_79/jre/lib/i386/server:/home/user/jdk1.7.0_79/jre/lib/i386:/home/user/jdk1.7.0_79/j

  • 考虑以下代码 结果如下: notifyAll()在13毫秒时被调用。但是,控件仅在10016毫秒时退出等待()。 从上面给出的代码中可以看出,在进行了通知()调用之后,等待()调用似乎没有立即结束。 但是,包括Java API在内的所有文档都指定,调用wait()的方法应该在notify()调用之后立即获得锁。 如果在调用通知()时等待()不会结束,那么对通知()的需求就会变得无效,因为即使没有调