したがって、この投稿を読む: Androidで文字列のSHA-256ハッシュを計算するにはどうすればよいですか?
およびドキュメント: http://developer.Android.com/reference/Java/security/MessageDigest.html
私は興味がある; SHA-256をサポートするのはどの電話ですか?ドキュメントでは、「NoSuchAlgorithmException」に関する行により、一部の電話はすべてのアルゴリズムをサポートしていないと思います。これをアプリに実装し、すべての電話で同じように動作することを期待する前に、誰かがこれについて何か知っているかどうか知りたい...?
MessageDigestクラスに、使用するアルゴリズムを選択するための定数がないのは不思議です。
すべてAndroidデバイスはSHA-256をサポートします。NoSuchAlgorithmException
は、リクエストされたアルゴリズムが見つからなかったため、メソッドがString
引数を受け取るために必要であることを示しますアルゴリズム名。「foo-256」を渡した場合、このメソッドの唯一の手段はNoSuchAlgorithmException
をスローすることです。これは、私の理解を超えた理由により、「foo-256」というアルゴリズムがないためです。名前で、あなたは確かにAndroidが使用できるアルゴリズムです。あなたはその例外を見ることは決してないでしょう。
以下のように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);
}
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
Android MessageDigest のドキュメント)によると、SHA-256はAPI 1以降サポートされています。