MessageDigest.getInstance("SHA")
動作しているようでMessageDigest
、 が表示されますが、それがどのアルゴリズムを提供しているのかわかりません。
SHA-1 か SHA-0 か .. か?
自分のマシンで何が起こるかには興味がありません。Javaのすべての有効な実装に対してsha0またはsha1を返すかどうかを知りたい(または未定義)。
MessageDigest.getInstance("SHA")
動作しているようでMessageDigest
、 が表示されますが、それがどのアルゴリズムを提供しているのかわかりません。
SHA-1 か SHA-0 か .. か?
自分のマシンで何が起こるかには興味がありません。Javaのすべての有効な実装に対してsha0またはsha1を返すかどうかを知りたい(または未定義)。
JCE 仕様には、実装がサポートすることが期待される標準名がリストされています。SHA-256、SHA-384、および SHA-512 と同様に、「SHA-1」が指定されています。「SHA」、「SHA-0」、および「SHA-2」は標準名ではないため、まったくサポートされていない可能性があります。標準にないため、「SHA」が返すものを保証することはできません。
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 など) をロードすると、それらも表示されます。