Я создал пару ключей на iOS с использованием SecKeyGeneratePair, а затем экспортировал ключи в publicKey и privateKey с использованием SecItemCopyMatching (Base64, закодированный перед экспортом, конечно).Теперь у меня проблема с шифрованием данных с использованием открытого ключа.Я использую следующую команду 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 бит для ключа?Для этого открытый ключ OpenSSL имеет длину 1024 бита.
Я попытался создать дополнительную структуру ASN.1 для publicKey, которая была сгенерирована iOS (с использованием редактора HEX и исправлением длины SEQUENCE).Его формат правильный (я проверил, что здесь http://lapo.it/asn1js/),, но я все еще не могу использовать его для OpenSSL. Похоже, что открытый ключ, возвращенный SecItemCopyMatching, потерял байт.
Я проверил содержимоеКроме того, privateKey, поскольку он содержит publicKey внутри. Длина publicKey там также составляет 1023 бита.
Вы можете мне помочь, пожалуйста? Заранее спасибо. Вот пара ключей, которая была сгенерирована на устройстве iOS:
ОткрытыйКлюч:
MIGIAoGAaXp7vlZ5WmCzaL1rrBKXC8rJuc7EpH7Us / 0t4R3hJoDOtRJxywegPY6wm45Oiud7UDh + 9loebAg4dcpUP1le5SkbxrC9Qp8XahmvYVMXUYVGDiLTWID3e3PdE7CwEM5 / lz1c1vRRWjR + 2GzvV4xf5gRwCzZW1tXvXCNWsraqwE8CAwEAAQ ==
PrivateKey: 1032*
1034 * MIICWwIBAAKBgGl6e75WeVpgs2i9a6wSlwvKybnOxKR + 1LP9LeEd4SaAzrUSccsHoD2OsJuOTorne1A4fvZaHmwIOHXKVD9ZXuUpG8awvUKfF2oZr2FTF1GFRg4i01iA93tz3ROwsBDOf5c9XNb0UVo0fths71eMX + YEcAs2VtbV71wjVrK2qsBPAgMBAAECgYBolCowc2hqdUosZPJmbyAXbv5HHXzWY3Hc6v8cHhXnqPpJiXoNhQgZQGpWMOgqzIv0467t7jgPgK8KCosxLBjqvQTVzBkHTsBpBAaJgxzgP04pD8EnJp6uwwx8fZcP3PQOwGkmtWf2KyAcBZD3A + snCxGTRMDOrEPzQe6kBapBwQJBASG9Go92pjIqTRMMam5A5oUt9R1 / iNx0wHowStyf2KHik1GRidaENIYkobZEzjKEbskcq3LGJGna163uu / Y55l8CQF0yLFHBdMi9hYX49s8Abzkd + 3sGI29hFkLrL01ZB2xV / WceNLQH7jxplRClri9Ccr1QFkMGcaXRv2X + eNu6DBECQQEdlTxZzhQwfBtuPB2nwNa2zL6 + rZdj3Lxfc7xGTFQF9MNKcg6P3825rt + qPZWUm45rMpQXVBBOOkO + kAK6xwU3AkBIE8vPFy25K0qfSOOpSQ68QAIFLcQuGgpbiwU0bwycrwyiuevM6O1J7 + aHz3udtWiEHfJ5t / whYM0ElwDl / 0fhAkEAq0EWoY8mQjHAGPMIhIty48fDbJCeFWFPx8lR + gegR1KwcIzcCGrYnHt8ihrfPm9ySjXwWDLYhBx0A5m + IbRZaA ==