gpt4 book ai didi

iphone - OpenSSL 不支持来自 iOS 的公钥

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:59 24 4
gpt4 key购买 nike

我在 iOS 上使用 SecKeyGeneratePair 创建了 key 对,然后使用 SecItemCopyMatching(当然是在导出前进行了 Base64 编码)将 key 导出到 publicKey 和 privateKey。现在我在使用公钥加密数据时遇到问题。我使用下一个 OpenSSL 命令:

openssl rsautl -encrypt -inkey publicKey -pubin -in text.txt -out text.enc

我收到来自 OpenSSL 的“无法加载公钥”响应。

我已经分析了 publicKey 并注意到它只包含以下内容:

SEQUENCE(2 elem)
| INTEGER(1023 bit)
| INTEGER 65537

当 OpenSSL 生成的公钥包含有关算法的附加信息时,例如 OpenSSL 创建的示例:

SEQUENCE(2 elem)
| SEQUENCE(2 elem)
| | OBJECT IDENTIFIER 1.2.840.113549.1.1.1
| | NULL
| BIT STRING(1 elem)
| | SEQUENCE(2 elem)
| | | INTEGER(1024 bit)
| | | INTEGER 65537

第一个问题是为什么publicKey只包含1023位的 key ?为此,OpenSSL 的公钥长度为 1024 位。

我尝试为 iOS 生成的 publicKey 创建额外的 ASN.1 结构(使用 HEX 编辑器并固定 SEQUENCE 长度)。它的格式是正确的(我在这里检查过 http://lapo.it/asn1js/ ),但我仍然不能将它用于 OpenSSL。看起来是因为 SecItemCopyMatching 返回的公钥丢失了字节。

我也检查了privateKey的内容,因为里面有publicKey。 publicKey的长度也是1023位。

你能帮帮我吗?提前致谢。这是在 iOS 设备上生成的 key 对:

公钥:

MIGIAoGAaXp7vlZ5WmCzaL1rrBKXC8rJuc7EpH7Us/0t4R3hJoDOtRJxywegPY6wm45Oiud7UDh+9loebAg4dcpUP1le5SkbxrC9Qp8XahmvYVMXUYVGDiLTWID3e3PdE7CwEM5/lz1c1vRRWjR+2GzvV4xf5gRwCzZW1tXvXCNWsraqwE8CAwEAAQ==

私钥:

MIICWwIBAAKBgGl6e75WeVpgs2i9a6wSlwvKybnOxKR+1LP9LeEd4SaAzrUSccsHoD2OsJuOTorne1A4fvZaHmwIOHXKVD9ZXuUpG8awvUKfF2oZr2FTF1GFRg4i01iA93tz3ROwsBDOf5c9XNb0UVo0fths71eMX+YEcAs2VtbV71wjVrK2qsBPAgMBAAECgYBolCowc2hqdUosZPJmbyAXbv5HHXzWY3Hc6v8cHhXnqPpJiXoNhQgZQGpWMOgqzIv0467t7jgPgK8KCosxLBjqvQTVzBkHTsBpBAaJgxzgP04pD8EnJp6uwwx8fZcP3PQOwGkmtWf2KyAcBZD3A+snCxGTRMDOrEPzQe6kBapBwQJBASG9Go92pjIqTRMMam5A5oUt9R1/iNx0wHowStyf2KHik1GRidaENIYkobZEzjKEbskcq3LGJGna163uu/Y55l8CQF0yLFHBdMi9hYX49s8Abzkd+3sGI29hFkLrL01ZB2xV/WceNLQH7jxplRClri9Ccr1QFkMGcaXRv2X+eNu6DBECQQEdlTxZzhQwfBtuPB2nwNa2zL6+rZdj3Lxfc7xGTFQF9MNKcg6P3825rt+qPZWUm45rMpQXVBBOOkO+kAK6xwU3AkBIE8vPFy25K0qfSOOpSQ68QAIFLcQuGgpbiwU0bwycrwyiuevM6O1J7+aHz3udtWiEHfJ5t/whYM0ElwDl/0fhAkEAq0EWoY8mQjHAGPMIhIty48fDbJCeFWFPx8lR+gegR1KwcIzcCGrYnHt8ihrfPm9ySjXwWDLYhBx0A5m+IbRZaA==

最佳答案

OpenSSL 需要 X.509 格式的 key (参见 RFC 3280):

 SubjectPublicKeyInfo  ::=  SEQUENCE  {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }

AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }

“subjectPublicKey”字符串取决于算法。对于 RSA,它是 (RFC 3447):

  RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}

我认为 key 是 1023 位而不是 1024 位不是问题。但您可以尝试生成更多,看看它们是否都是 1023 位长。

当您尝试使用自己的创建(更新的 ASN.1 结构)时,OpenSSL 会说什么?你能把它贴在这里吗?

此外,OpenSSL 期望它采用 PEM 格式,在 Base64 数据周围带有“-----BEGIN RSA PUBLIC KEY-----”和“-----END RSA PUBLIC KEY-----”。

关于iphone - OpenSSL 不支持来自 iOS 的公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com