【问题标题】:Does SHA256 have good cross platform support?SHA256 是否有良好的跨平台支持?
【发布时间】:2014-11-05 04:29:51
【问题描述】:

我目前正在设计一个新的 REST API,我正在考虑需要消息签名。在高层次上,模型是这样的:

  1. API 使用者获得了 API 密钥和秘密
  2. API 使用者使用 Secret 创建它发送到 API 的消息的消息摘要 HMAC。

我一直在考虑使用 SHA256 进行签名,但想确保它可以使用:

  1. Android/Java
  2. iOS
  3. 所有其他主要平台等

我意识到 SHA-1 有很好的支持,但如果可能的话,我真的需要使用更强大的东西。

【问题讨论】:

  • 如果您发现一个没有现有支持的平台,您是否认为自己难以移植?
  • 我不知道将 SHA-256 的实现从一个平台移植到另一个平台会有多困难,我还没有真正研究过。刚从这个线程开始研究。
  • en.wikipedia.org/wiki/SHA-2 有一个很小的伪代码例程,并且还指示了许多库的库……看起来你不太可能需要自己做端口。
  • SHA256 可能不是 265?
  • 是的,很好。固定

标签: java android ios encryption sha256


【解决方案1】:

iOS 中的 CommonCrypto 支持 SHA256。 Java 通过MessageDigest.getInstance("SHA-256") 支持它,Android 也支持它(Java)。并且不要忘记也支持它的 Windows Phone。在我看来,这很重要。

正如您已经指出的那样,您不应该使用 SHA1,因为它不是 secure enough anymore

【讨论】:

    【解决方案2】:

    较旧的 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

    【讨论】:

    • 问题与 SHA-256withRSA 无关,您只将 Android 作为一个平台。