20

Androidでうまく機能するコードがあります。JRE1.6を搭載したWindows64ビットマシンに移植したところ、コードが機能しませんでした。

次のコード行を実行すると、次のようになります。

final MessageDigest digest = MessageDigest.getInstance("SHA256")

次の例外が発生します。

java.security.NoSuchAlgorithmException:SHA256 MessageDigestはsun.security.jca.GetInstance.getInstance(Unknown Source)at java.security.Security.getImpl(Unknown Source)at java.security.MessageDigest.getInstance(Unknown Source)では利用できません

私はインターネットで、Sun JREに付属している標準の暗号プロバイダーでSHA256を使用できると主張している人や、BouncyCastleなどの別のプロバイダーを使用する必要があると言っている人を見つけました。

別のプロバイダーを使用したくない。それを機能させることは可能ですか?

4

2 に答える 2

38

JCAサービスに使用できるアルゴリズムがわからない場合は、最初の呼び出しポートをJCA標準アルゴリズム名のドキュメントにする必要があります。JCA準拠のJVMでMessageDigestサービスによってサポートされることが保証されているアルゴリズムは次のとおりです。

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

プロバイダーがこれらのアルゴリズムのエイリアスを提供するのは一般的であるため、おそらくBouncy Castleで機能しますが、移植性を最大化できる場合は、これらに固執する必要があります。

コードを次のように変更すると、期待どおりに機能します。

final MessageDigest digest = MessageDigest.getInstance("SHA-256");
于 2012-09-28T15:20:36.830 に答える
4

SHA-256はgetInstance()のパラメータである必要があります

メッセージダイジェストでサポートされているアルゴリズムのリストへのリンク

于 2012-09-28T15:21:42.603 に答える