29

MessageDigest.getInstance("SHA")動作しているようでMessageDigest、 が表示されますが、それがどのアルゴリズムを提供しているのかわかりません。

SHA-1 か SHA-0 か .. か?


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

4

2 に答える 2

26

JCE 仕様には、実装がサポートすることが期待される標準名がリストされています。SHA-256、SHA-384、および SHA-512 と同様に、「SHA-1」が指定されています。「SHA」、「SHA-0」、および「SHA-2」は標準名ではないため、まったくサポートされていない可能性があります。標準にないため、「SHA」が返すものを保証することはできません。

于 2013-02-15T22:55:52.230 に答える
19

SHA-0 は廃止されました。Java JCE MessageDigest で使用する場合、一部の JCE プロバイダーでは SHA == SHA-1。ところで、SHA-1 は、今日のコンピューターとテクノロジーでは安全であるとは見なされていません。SHA-512 は、ほとんど何に対しても安全です。SHA-256 は、ほとんどの場合に問題ありません。

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

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 など) をロードすると、それらも表示されます。

于 2013-02-15T21:35:46.580 に答える