web-dev-qa-db-ja.com

すべてのAndroid電話はSHA-256をサポートしていますか?

したがって、この投稿を読む: Androidで文字列のSHA-256ハッシュを計算するにはどうすればよいですか?

およびドキュメント: http://developer.Android.com/reference/Java/security/MessageDigest.html

私は興味がある; SHA-256をサポートするのはどの電話ですか?ドキュメントでは、「NoSuchAlgorithmException」に関する行により、一部の電話はすべてのアルゴリズムをサポートしていないと思います。これをアプリに実装し、すべての電話で同じように動作することを期待する前に、誰かがこれについて何か知っているかどうか知りたい...?

MessageDigestクラスに、使用するアルゴリズムを選択するための定数がないのは不思議です。

35
joshkendrick

すべてAndroidデバイスはSHA-256をサポートします。NoSuchAlgorithmExceptionは、リクエストされたアルゴリズムが見つからなかったため、メソッドがString引数を受け取るために必要であることを示しますアルゴリズム名。「foo-256」を渡した場合、このメソッドの唯一の手段はNoSuchAlgorithmExceptionをスローすることです。これは、私の理解を超えた理由により、「foo-256」というアルゴリズムがないためです。名前で、あなたは確かにAndroidが使用できるアルゴリズムです。あなたはその例外を見ることは決してないでしょう。

30
Chris Cashwell

以下のようにNoSuchAlgorithmExceptionを追加します。

public static String SHA256 (String text) throws NoSuchAlgorithmException {

    MessageDigest md = MessageDigest.getInstance("SHA-256");

    md.update(text.getBytes());
    byte[] digest = md.digest();

    return Base64.encodeToString(digest, Base64.DEFAULT);
}
18
Soheil

SHA-256withRSAは古いAndroidバージョンでサポートされていません(Android 4.0.3、4.1.1でも同じように検証されています)。使用中にこの問題が発生しましたJSCEP。SCEPサーバーによって返されるダイジェストアルゴリズムはSHA-256です。ただし、SHA-256withRSAはこれらのAndroidバージョンのデフォルトのSecurityProvidersには存在しません。関連リンクが見つかりました: どのバージョンof Androidサポートするパッケージ署名アルゴリズムをサポートしていますか?

このリンクは、SHA-256withRSAが後で追加されたことを示しています: https://Android-review.googlesource.com/4436

5
garnet

Android MessageDigest のドキュメント)によると、SHA-256はAPI 1以降サポートされています。

enter image description here

4
Megaetron