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 が期待するシーケンスのみにエクスポートする方法を教えてください。