gpt4 book ai didi

java - MD5 MessageDigest 在系统类加载器中不可用

转载 作者:行者123 更新时间:2023-11-30 04:31:24 27 4
gpt4 key购买 nike

我有一个自定义类加载器,在它的构造函数中我有以下行。

MessageDigest.getInstance("MD5")

当我使用自定义类加载器作为系统类加载器运行示例主应用程序时,出现以下错误。

Error occurred during initialization of VM
java.lang.Error: java.security.NoSuchAlgorithmException: MD5 MessageDigest not available
at java.lang.ClassLoader.initSystemClassLoader(ClassLoader.java:1504)
at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1468)

由于安全提供程序来自 rt.jar,我认为这些类必须由引导类加载器加载,因此我应该能够在我的类加载器中使用它们。毕竟我可以访问 MessageDigest 类。为什么提供者类不可用?

编辑:

我注意到的一件奇怪的事情是,虽然以下失败,

getInstance("MD5")
getInstance("MD5", "SUN")

这个有效!

getInstance("MD5", new sun.security.provider.Sun())

所以提供程序类毕竟是由引导加载程序加载的,但由于某种原因查找失败。我想知道为什么?

最佳答案

我刚刚尝试将 MD5 作为自定义类加载器中构造函数的一部分加载,看起来加载得很好。

MD5 是以下内容的一部分:导入java.security.MessageDigest;

我还尝试了 SHA - 这对我来说也很好用。也许您可以重新检查 java 版本 - 因为旧版本不包括在内,或者您可以通过加载其他算法进行检查。比如 SHA 之类的?

我的代码片段 公共(public)MD5测试(){ super (MD5Test.class.getClassLoader()); 尝试 { MessageDigest md = MessageDigest.getInstance("MD5"); System.out.println("我在这里.."); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); }

关于java - MD5 MessageDigest 在系统类加载器中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567740/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com