【发布时间】: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