【问题标题】:Does every Android phone support SHA-256是否每部 Android 手机都支持 SHA-256
【发布时间】:2012-04-25 03:18:14
【问题描述】:

所以阅读这篇文章:How can I calculate the SHA-256 hash of a string in Android?

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

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

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

【问题讨论】:

  • +1 好问题。我完全同意应该有常数。

标签: android hash sha message-digest


【解决方案1】:

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

【讨论】:

  • 虽然我基本同意,但您不能 100% 确定 所有 设备都支持 SHA-256。不管多么不可能,有人可能会决定保存几个字节并将其取出。尤其是因为除非设备具有 Market/Play 应用程序,否则对于“Android”必须支持什么没有明确的定义。如果需要确定,您可以随时列出支持的算法/机制:stackoverflow.com/questions/3683302/…
  • 好吧:1. Android 从未使用过 JDK:核心库(一些源自 Apache Harmony)和 JVM (Dalvik) 都是它自己的。 2. MessageDigest 只是一个 JCE 接口,要能够使用 SHA-256、MD5 或其他任何东西,需要有一个 Provider 来实现这些算法。 Android 的 JCE 提供程序是从 BouncyCastle 派生的,众所周知,它被完全剥离,尤其是在早期的 Android 版本上。制造商确实定制了这两个框架,有时非常激进。这也可能包括系统 JCE 提供程序。
  • 您实际上错过了重点:接口!= 实现。
【解决方案2】:

添加 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);
}

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        • 1970-01-01
        相关资源
        最近更新 更多