web-dev-qa-db-ja.com

MessageDigest.getInstance( "SHA")が返す特定のハッシュアルゴリズムは何ですか?

MessageDigest.getInstance("SHA")は機能しているようで、MessageDigestを取得しますが、どのアルゴリズムを使用しているかはわかりません。

それはSHA-1またはSHA-0または..ですか?


自分のマシンで何が起こるか興味はありません。 Java(または未定義)のすべての有効な実装に対して、sha0またはsha1を返すかどうかを知りたいです。

27
megazord

JCE仕様 は、実装がサポートすると予想される標準名をリストします。 SHA-256、SHA-384、SHA-512と同様に、「SHA-1」が指定されています。 「SHA」、「SHA-0」、「SHA-2」は標準の名前ではないため、サポートされていない可能性があります。「SHA」が標準ではないため、何が返されるかは保証できません。

25
Simon G.

SHA-0は廃止されました。 Java JCE MessageDigest、SHA ==一部のJCEプロバイダーのSHA-1で使用します。ちなみに、SHA-1は安全とは見なされていません。 SHA-512は、ほとんどすべてのものに対して安全であり、SHA-256は、ほとんどの場合に問題ありません。

このコードで使用しているJavaバージョンで利用可能なプロトコルを一覧表示できます。(私はそれを得た here ):

import Java.security.Provider;
import Java.security.Security;

public class JceLook {

    public static void main(String[] args) {
        System.out.println("Algorithms Supported in this JCE.");
        System.out.println("====================");
        // heading
        System.out.println("Provider: type.algorithm -> className" + "\n  aliases:" + "\n  attributes:\n");
        // discover providers
        Provider[] providers = Security.getProviders();
        for (Provider provider : providers) {
            System.out.println("<><><>" + provider + "<><><>\n");
            // discover services of each provider
            for (Provider.Service service : provider.getServices()) {
                System.out.println(service);
            }
            System.out.println();
        }
    }
}

利用可能なさまざまなアルゴリズムすべてについて、このような情報が表示されます。 (これは、Oracle/Sunの更新レベルに関する上記のプログラムからの実際の出力であることに注意してくださいJava 6であり、SHAがSHA-1と同等であることを示しています。およびSHA1。3つの文字列のいずれかをMessageDigestに渡して同じ結果を得ることができますが、これは暗号化プロバイダー(JCE)に依存しており、同じではない場合があります。)

Sun: MessageDigest.SHA -> Sun.security.provider.SHA
  aliases: [SHA-1, SHA1]
  attributes: {ImplementedIn=Software}

追加のプロバイダー(BouncyCastleなど)をロードすると、それらも表示されます。

17
Lee Meador