【问题标题】:OpenSSL RSA public key digestOpenSSL RSA 公钥摘要
【发布时间】:2021-10-08 17:23:16
【问题描述】:

我正在尝试在 iOS (Swift) 和 macOS(终端和 OpenSSL)上计算公钥的哈希值,但两个平台都以稍微不同的格式导出密钥。

我的 Swift 代码提取包含模数和指数的序列(根据 Apple,这是 PKCS#1 容器)。

let export = SecKeyCopyExternalRepresentation(publicKey, nil)! as Data
let hash = SHA256.hash(data: export)
// SHA256 digest: 57fc8238c609045b7c0b546f58d5f797ebec4e39eff481459edfb67bd850834d
print(hash)

现在,当我使用终端执行类似操作时,我会得到不同的输出。

openssl rsa -pubin -outform DER | openssl dgst -sha256                             
# writing RSA key
# 0ee9c99ef4ca3316e90dde23925bc9a670fa309d6f4663bb5d42050b5089b086

后一种情况是由于 OpenSSL 将输出包装在更完整的结构化 ASN.1 容器中。

SEQUENCE      (ASN.1 container)
  SEQUENCE
    OID       (RSA algorithm)
    NULL
  BITSTRING
    SEQUENCE  (iOS container)   
      INTEGER (Modulus)
      INTEGER (Exponent)

如何使用 OpenSSL 将密钥导出为仅 iOS 期望的序列,以便两个命令的 has 相同?

【问题讨论】:

  • 如果你把它放在答案中,我会接受它
  • 老实说,就目前而言,我认为这是链接到答案的欺骗。我已经让戴夫在那里回答,但如果他不回答,我可能会这样做。或者我可以编辑投票最多的答案,这样它至少是正确的,因为目前它不是。

标签: swift hash openssl rsa asn1


【解决方案1】:

事实证明,OpenSSL 有一个未记录的参数 -RSAPublicKey_out,它输出与 SecKeyCopyExternalRepresentation 相同的数据。

openssl rsa -pubin -RSAPublicKey_out -outform DER | openssl dgst -sha256

这为 iOS 和 macOS 提供了相同的摘要

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    相关资源
    最近更新 更多