每部Android手机都支持SHA-256吗?

jos*_*ick 34 hash android sha message-digest

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

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

我很好奇; 哪些手机支持SHA-256?在文档中,关于'NoSuchAlgorithmException'的一行让我觉得有些手机不支持所有算法.在我为一个应用程序实现这个并期望它在所有手机上工作之前我想知道如果有人知道这个...?

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

Chr*_*ell 30

所有Android设备都支持SHA-256.该NoSuchAlgorithmException指示请求的算法无法找到,是必要的,因为该方法需要String对算法名称的说法.如果你传入"foo-256",那么该方法唯一的办法是抛出一个NoSuchAlgorithmException因为,由于我理解的原因,没有一个叫做"foo-256"的算法.假设您传递了一个名称,您确定它是Android可以使用的算法,您将永远不会看到该异常.

  • 好吧:1.Android从未使用过JDK:核心库(一些派生自Apache Harmony)和JVM(Dalvik)都是它自己的.2.`MessageDigest`只是一个JCE接口,为了能够使用SHA-256,MD5或其他什么,需要一个实现这些算法的`Provider`.Android的JCE提供程序源自BouncyCastle,并且已经被剥离,特别是在早期的Android版本中.制造商确实定制了框架,有时候非常积极.这可能包括系统JCE提供程序. (4认同)
  • 你实际上忽略了这一点:interface!= implementation. (3认同)
  • 虽然我大多同意,但你不能100%确定*所有*设备都支持SHA-256.但不太可能,有人可能会决定保存几个字节并将其取出.特别是因为,除非设备有市场/播放应用程序,否则没有明确定义"Android"必须支持的内容.如果需要确定,可以随时列出支持的算法/机制:http://stackoverflow.com/questions/3683302/how-to-find-out-what-algorithm-encryption-are-supported-by -My-JVM (2认同)

小智 18

添加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);
}
Run Code Online (Sandbox Code Playgroud)


gar*_*net 5

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

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


Meg*_*ron 5

根据MessageDigest的 Android 文档,自 API 1 起支持 SHA-256。

在此处输入图片说明