すでに生成されているキーペア(2SecKeyRef
秒)から1024ビットのRSA公開キーを抽出して、ネットワーク経由で送信しようとしています。必要なのはプレーン(modulus, exponent)
ペアだけです。これは正確に131バイトを占める必要があります(モジュラスは128バイト、指数は3バイト)。
ただし、キー情報をNSData
オブジェクトとしてフェッチすると、131ビットではなく140ビットが取得されます。結果の例を次に示します。
<30818902 818100d7 514f320d eacf48e1 eb64d8f9 4d212f77 10dd3b48 ba38c5a6
ed6ba693 35bb97f5 a53163eb b403727b 91c34fc8 cba51239 3ab04f97 dab37736
0377cdc3 417f68eb 9e351239 47c1f98f f4274e05 0d5ce1e9 e2071d1b 69a7cac4
4e258765 6c249077 dba22ae6 fc55f0cf 834f260a 14ac2e9f 070d17aa 1edd8db1
0cd7fd4c c2f0d302 03010001>
キーの生成を数回再試行し、結果のNSData
オブジェクトを比較した後、すべてのキーで同じままのバイトは最初の7つです。
<30818902 818100>
最後の3バイトは、指数(65537、一般的な値)のように見えます。「モジュラス」と指数の間にも2バイトあります。
<0203>
暗号の経験が豊富な人は、これがどのエンコーディングであるかを特定するのに役立ちますか?DER?モジュラスと指数を正しくデコードするにはどうすればよいですか?
を使用してモジュラスと指数を手動で削除してみました
NSData* modulus = [keyBits subdataWithRange:(NSRange){ 7, 128 }];
NSData* exponent = [keyBits subdataWithRange:(NSRange){ 7 + 128 + 2, 3 }];
しかし、リモートホストがその「キー」を使用してエンコードしたデータを復号化しようとするとエラーが発生します。
編集:
RSA BLOBを解凍するために使用したソリューションの要点は次のとおりです:https ://gist.github.com/vl4dimir/6079882