5
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);
    }

しかし、私はException in thread "main" java.security.NoSuchAlgorithmException: SHA_512 MessageDigest not availableエラーが発生しました

4

5 に答える 5

16

以下は、Javaによって提供される標準のハッシュアルゴリズムMessageDigestです。

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

ファクトリメソッドに指定している名前を確認することをお勧めします。

于 2013-02-17T04:49:59.723 に答える
12

最も可能性の高い説明は、REALコードがでは"SHA_512"なく持っているということです"SHA-512"。確かに、それは例外メッセージにアンダースコアがある理由を説明します。

もう1つの可能性は、米国の輸出制限のために「軍事力」の暗号化アルゴリズムが削除されたJVMがあることです。しかし、それはかなりありそうもないと思います...

(実際、これを読んだところ、SHA-512はデフォルトの「Sun」プロバイダーのすべてのバージョンに含まれていました。)

于 2013-02-17T04:52:37.583 に答える
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();
}

SHA-512アルゴリズムとして使用します。メソッドに渡すことができる他の可能なアルゴリズム名については、次のリンクにアクセスしてください。https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#MessageDigest

于 2015-10-16T14:42:40.490 に答える
2

MessageDigestクラスは、SHA-1やMD5などの暗号的に安全なメッセージダイジェストの機能を提供するように設計されたエンジンクラスです。暗号的に安全なメッセージダイジェストは、任意のサイズの入力(バイト配列)を受け取り、固定サイズの出力を生成します。

参照

MessageDigest すべてのプロバイダーを印刷するには-

Provider provider[] = Security.getProviders();
for (Provider pro : provider) {
    System.out.println(pro);
    for (Enumeration e = pro.keys(); e.hasMoreElements();)
        System.out.println("\t" + e.nextElement());

}

そして幸いなことSHA-512にそこにはありますが、SHA_512ありません。:)

于 2013-02-17T04:46:39.190 に答える
1

Groovy言語では、以下のメソッドを使用して、SHA-512を介してハッシュ文字列を生成できます。

それは私のために完全に働いています。

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

      //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();
    }
于 2017-10-11T10:54:08.100 に答える