39

所以阅读这篇文章:如何在 Android 中计算字符串的 SHA-256 哈希?

和文档:http: //developer.android.com/reference/java/security/MessageDigest.html

我很好奇; 哪些手机将支持 SHA-256?在文档中,关于“NoSuchAlgorithmException”的行让我觉得有些手机不支持所有算法。在我为一个应用程序实现这个并期望它在所有手机上都能正常工作之前,我想知道是否有人对此有所了解......?

我觉得奇怪的是 MessageDigest 类没有一些常量来选择你想使用的算法。

4

4 回答 4

33

所有 Android 设备都支持 SHA-256。NoSuchAlgorithmException表示无法找到请求的算法并且是必需的,因为该方法需要算法名称的参数String。如果你传入“foo-256”,该方法唯一的办法就是抛出一个NoSuchAlgorithmException,因为我无法理解的原因,没有称为“foo-256”的算法。假设您传入一个您确定是 Android 可以使用的算法的名称,您将永远不会看到该异常。

于 2012-04-12T18:21:42.340 回答
21

添加 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);
}
于 2013-09-18T18:17:04.667 回答
7

根据MessageDigest的 Android 文档,从 API 1 开始支持 SHA-256。

在此处输入图像描述

于 2019-04-19T12:33:42.770 回答
6

旧的 android 版本不支持 SHA-256withRSA(在 Android 4.0.3、4.1.1 中验证相同)。我在使用 JSCEP 时遇到过这个问题。SCEP 服务器返回的摘要算法是 SHA-256。但 SHA-256withRSA 不存在于这些 android 版本中的任何默认 SecurityProviders 中。找到相关链接: 哪些版本的 Android 支持哪些包签名算法?

此链接显示 SHA-256withRSA 是后来添加的: https ://android-review.googlesource.com/44360

于 2014-11-04T17:24:16.153 回答