我想提取1024位的RSA公钥从已生成的密钥对密钥(二SecKeyRef
S),以通过网络发送它。 我所需要的是一个普通的(modulus, exponent)
对,其要占用正好131个字节(128为模量和3的指数)。
然而,当我获取关键信息作为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斑点: https://gist.github.com/vl4dimir/6079882