java - MessageDigest.getInstance(algorithm) 总是抛出 NoSuchAlgorithmException

标签 java hash jce

我正在创建一个简单的密码保险库/生成器,现在我正在处理我的代码的保险库部分,并且正在编写用于加密密码的代码。我正在使用 MessageDigest。

但是,当我尝试选择一种算法时,它总是抛出 NoSuchAlgorithmException。我正在尝试使用 SHA-1 或 SHA-256。我到处都看过,但找不到解决方案。编辑:我忘了说我试过“SHA-1”、“SHA-256”和“MD5”。没有效果。

我的方法:

private static String generateHash(String input) throws NoSuchAlgorithmException {
    MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
    messageDigest.update(input.getBytes());
    String encryptedString = new String(messageDigest.digest());
    System.out.println("encryptedString :: " + encryptedString);
    return encryptedString;
}

(我只是出于调试目的打印出 encryptedString)

我正在使用 JDK 1.8.0_91 和 IntelliJ IDEA 1.5.0.2。

编辑: 所以我弄清楚出了什么问题。我不需要使用 throws NoSuchAlgorithmException,而是将代码放入 try/catch block 中以捕获 NoSuchAlgorithmException。我不知道为什么,但它解决了我的问题。

最佳答案

根据 Oracle 关于 MessageDigest 类的文档:

Every implementation of the Java platform is required to support the following standard MessageDigest algorithms:

MD5, SHA-1, SHA-256

Oracle 的 JVM 支持 MD2、MD5、SHA-1、SHA-256、SHA-384 和 SHA-512

关于java - MessageDigest.getInstance(algorithm) 总是抛出 NoSuchAlgorithmException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36973078/

相关文章:

java - JCE上的解决​​方法无法验证提供程序

java - 启用 Java 安全性(Java 加密扩展 - JCE)后 Eclipse 崩溃

Java DateTimeFormatter 用偏移量解析 YearMonth

java - 广播接收器未在 Android Pie 中注册(工作)

c# - 在 C# 中从哈希集中检索对象

ruby-on-rails - 在哈希数组中查找值以创建新的哈希数组

java - 线程 "main"java.security.InvalidKeyException : Illegal key size or default parameters 中的异常

Java SQL : Statement. hasResultSet()?

Java AudioSystem .wav 文件行为差异

arrays - 在 Ruby 中将数组转换为索引哈希