首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS SecItemCopyMatching RSA公钥格式?

iOS SecItemCopyMatching RSA公钥格式?
EN

Stack Overflow用户
提问于 2012-10-17 20:51:50
回答 1查看 2.1K关注 0票数 5

我正在尝试从已经生成的密钥对(两个SecKeyRef)中提取一个1024位的RSA公钥,以便通过网络发送它。我所需要的是一个普通的(modulus, exponent)对,它应该恰好占用131个字节(128表示模数,3表示指数)。

但是,当我以NSData对象的形式获取密钥信息时,得到的是140位而不是131位。下面是一个示例结果:

代码语言:javascript
复制
<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个:

代码语言:javascript
复制
<30818902 818100>

最后三个字节看起来像指数(65537,一个常见值)。在“模数”和指数之间还有两个字节:

代码语言:javascript
复制
<0203>

有更多密码经验的人可以帮助我识别这是什么编码吗?DER?如何正确解码模数和指数?

我尝试使用以下命令手动剥离模数和指数

代码语言:javascript
复制
NSData* modulus = [keyBits subdataWithRange:(NSRange){ 7, 128 }];
NSData* exponent = [keyBits subdataWithRange:(NSRange){ 7 + 128 + 2, 3 }];

但在尝试解密远程主机使用该“密钥”编码的数据时,我遇到了错误。

编辑:

下面是我最终用来解压RSA的解决方案的要点:https://gist.github.com/vl4dimir/6079882

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-17 21:11:53

假设你想让这个解决方案在iOS下工作,请看一下this thread。这篇文章确认了编码是DER,并展示了如何从您开始使用的NSData对象中提取指数和模数。

还有一种解决方案不适用于iOS,但适用于在this thread中安装了OpenSSL的台式机系统(包括MacOS X)。即使您正在寻找仅用于iOS的解决方案,您仍然可以使用它来验证您的代码是否正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12934743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档