Java不支持SHA-512?

use*_*501 4 java hash sha

try {
        MessageDigest digest = MessageDigest.getInstance("SHA-512");
        byte[] output = digest.digest(password);

        digest.update(salt);
        digest.update(output);
        return new BigInteger(1, digest.digest());
    } catch (NoSuchAlgorithmException e) {
        throw new UnsupportedOperationException(e);
    }
Run Code Online (Sandbox Code Playgroud)

但我得到了Exception in thread "main" java.security.NoSuchAlgorithmException: SHA_512 MessageDigest not available错误

Per*_*ion 15

以下是Java提供的标准散列算法MessageDigest:

  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

您可能需要验证要提供给工厂方法的名称.


Ste*_*n C 11

我想说最可能的解释是你的真实代码"SHA_512"而不是"SHA-512".当然,这可以解释为什么异常消息中有下划线.

另一种可能性是,由于美国的出口限制,你已经删除了"军事实力"加密算法的JVM.但是,我认为这不太可能......

(事实上​​,我对此的解读是,无论如何,SHA-512都包含在默认"Sun"提供商的所有版本中.)


Vis*_*oot 7

以下是可用于通过SHA-512获取哈希字符串的示例方法:

private static String getHashCodeFromString(String algorithm, String str) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance(algorithm);
    md.update(str.getBytes());
    byte byteData[] = md.digest();

    //convert the byte to hex format method 1
    StringBuffer hashCodeBuffer = new StringBuffer();
    for (int i = 0; i < byteData.length; i++) {
        hashCodeBuffer.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
    }
    return hashCodeBuffer.toString();
}
Run Code Online (Sandbox Code Playgroud)

使用SHA-512的算法.转到以下链接,了解您可以通过方法传递的其他可能的算法名称.https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#MessageDigest