我試圖從一個已經生成的密鑰對(兩個SecKeyRef
s)中提取1024位RSA公鑰,以便通過線路發送它。我需要的只是一個普通的(modulus, exponent)
對,它應該佔用131個字節(128爲模數,3爲指數)。iOS SecItemCopyMatching RSA公鑰格式?
但是,當我取的關鍵信息作爲NSData
對象,我得到140位,而不是131.下面是一個例子結果:
<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>
最後三個字節看起來像指數(65537,一個共同的價值)。還有兩個字節的「模數」和指數之間:
<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
這是此共同ASN.1 RSA公鑰格式的DER編碼: 'RSAPublicKey :: = SEQUENCE { 模量INTEGER - , - N publicExponent INTEGER - 電子 }' 見[PKCS -1](http://tools.ietf.org/html/rfc3447#appendix-A.1.1) –