iOS的SecItemCopyMatching RSA公共密钥格式?(iOS SecItemCopy

2019-09-24 05:59发布

我想提取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

Answer 1:

假设你要解决的iOS下工作,请看看这个线程 。 后证实,该编码是DER并展示如何从中提取指数和模量NSData您开始使用对象。

有不会在iOS上工作,但对已安装OpenSSL中的桌面系统(包括MacOS X系统)将工作的另一个解决方案这个线程 。 即使你正在寻找的IOS的唯一的解决方案,你仍然可以用它来验证你的代码是否正常工作。



文章来源: iOS SecItemCopyMatching RSA public key format?