我创造密钥对iOS上使用SecKeyGeneratePair然后出口键来公钥和专用密钥使用SecItemCopyMatching的(Base64当然出口之前编码)。现在我遇到了使用公钥加密数据的问题。我使用下一个OpenSSL命令:公钥不通过的OpenSSL
openssl rsautl -encrypt -inkey publicKey -pubin -in text.txt -out text.enc
我从OpenSSL得到“无法加载公钥”响应。
我已经分析了公钥,发现它只包含一个内容:
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位的长度。
我试图用于将其通过的iOS生成(用HEX编辑和固定序列长度)公钥创建额外的ASN.1结构。它的格式是正确的(我已经在这里检查了http://lapo.it/asn1js/),但是我仍然不能将它用于OpenSSL。看起来像是因为SecItemCopyMatching返回的公钥丢失了字节。
我检查专用密钥的内容还,因为它里面包含公钥。 publicKey的长度也有1023位。
你能帮助我吗?提前致谢。这里是将其iOS设备上生成一个密钥对:
公钥:
MIGIAoGAaXp7vlZ5WmCzaL1rrBKXC8rJuc7EpH7Us/0t4R3hJoDOtRJxywegPY6wm45Oiud7UDh + 9loebAg4dcpUP1le5SkbxrC9Qp8XahmvYVMXUYVGDiLTWID3e3PdE7CwEM5/lz1c1vRRWjR + 2GzvV4xf5gRwCzZW1tXvXCNWsraqwE8CAwEAAQ ==
专用密钥:
MIICWwIBAAKBgGl6e75WeVpgs2i9a6wSlwvKybnOxKR + 1LP9LeEd4SaAzrUSccsHoD2OsJuOTorne1A4fvZaHmwIOHXKVD9ZXuUpG8awvUKfF2oZr2FTF1GFRg4i01iA93tz3ROwsBDOf5c9XNb0UVo0fths71eMX + YEcAs2VtbV71wjVrK2qsBPAgMBAAECgYBolCowc2hqdUosZPJmbyAXbv5HHXzWY3Hc6v8cHhXnqPpJiXoNhQgZQGpWMOgqzIv0467t7jgPgK8KCosxLBjqvQTVzBkHTsBpBAaJgxzgP04pD8EnJp6uwwx8fZcP3PQOwGkmtWf2KyAcBZD3A + snCxGTRMDOrEPzQe6kBapBwQJBASG9Go92pjIqTRMMam5A5oUt9R1/iNx0wHowStyf2KHik1GRidaENIYkobZEzjKEbskcq3LGJGna163uu/Y55l8CQF0yLFHBdMi9hYX49s8Abzkd + 3sGI29hFkLrL01ZB2xV/WceNLQH7jxplRClri9Ccr1QFkMGcaXRv2X + eNu6DBECQQEdlTxZzhQwfBtuPB2nwNa2zL6 + rZdj3Lxfc7xGTFQF9MNKcg6P3825rt + qPZWUm45rMpQXVBBOOkO + kAK6xwU3AkBIE8vPFy25K0qfSOOpSQ68QAIFLcQuGgpbiwU0bwycrwyiuevM6O1J7 + aHz3udtWiEHfJ5t/whYM0ElwDl/0fhAkEAq0EWoY8mQjHAGPMIhIty48fDbJCeFWFPx8lR + gegR1KwcIzcCGrYnHt8ihrfPm9ySjXwWDLYhBx0A5m + IbRZaA ==
下面是一个Objective-C代码片段:http://blog.wingsofhermes.org/?p=42如果没有编码的方法,我还没有看到它。 Tim –