2

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

4

1 に答える 1