OpenSSL RSA public 密钥摘要
OpenSSL RSA public key digest
我正在尝试计算 iOS (Swift) 和 macOS(终端和 OpenSSL)上的 public 密钥的哈希值,但是这两个平台都将密钥导出到格式略有不同。
我的 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 相同?
事实证明 OpenSSL 有一个未记录的参数 -RSAPublicKey_out
输出与 SecKeyCopyExternalRepresentation
相同的数据。
openssl rsa -pubin -RSAPublicKey_out -outform DER | openssl dgst -sha256
这为 iOS 和 macOS
提供了相同的摘要
我正在尝试计算 iOS (Swift) 和 macOS(终端和 OpenSSL)上的 public 密钥的哈希值,但是这两个平台都将密钥导出到格式略有不同。
我的 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 相同?
事实证明 OpenSSL 有一个未记录的参数 -RSAPublicKey_out
输出与 SecKeyCopyExternalRepresentation
相同的数据。
openssl rsa -pubin -RSAPublicKey_out -outform DER | openssl dgst -sha256
这为 iOS 和 macOS
提供了相同的摘要