当前位置: 首页 > 知识库问答 >
问题:

iOSSecItemCopyMatding RSA公钥格式?

柯星辰
2023-03-14

我试图从已经生成的密钥对(两个SecKeyRefs)中提取1024位RSA公钥,以便通过网络发送。我只需要一个普通的(模,指数)对,它应该正好占用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>

有加密经验的人能帮我确定这是什么编码吗?德?如何正确解码模和指数?

我试着用

NSData* modulus = [keyBits subdataWithRange:(NSRange){ 7, 128 }];
NSData* exponent = [keyBits subdataWithRange:(NSRange){ 7 + 128 + 2, 3 }];

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

编辑:

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

共有1个答案

邓高韵
2023-03-14

假设您希望解决方案在iOS下工作,请查看此线程。这篇帖子确认了编码是DER,并展示了如何从您开始使用的NSData对象中提取指数和模。

还有一个解决方案在iOS上不起作用,但可以在桌面系统(包括MacOS X)上工作,这些系统在此线程中安装了OpenSSL。即使您正在寻找iOS的解决方案,您仍然可以使用它来验证您的代码是否正确工作。

 类似资料:
  • 如何使用作为字符串提供的公共和私有RSA密钥进行加密和解密。因为我正在使用RSACryptoServiceProvider,它需要XML格式,所以是否有可能使用提供的字符串。谢谢。

  • 如何在两种公钥格式之间进行转换,一种格式是: 另一种格式是: 例如,我使用ssh-keygen命令生成id_rsa/id_rsa.pub对,我使用id_rsa计算公钥: 然后我再次从id_rsa计算公钥。发布使用: 内容是pub1是: 而pub2的内容是: 根据我的理解,pub1和pub2包含相同的公钥信息,但是它们的格式不同,我想知道如何在两种格式之间转换?有人能给我看一些关于两种格式的简明介绍

  • 我创造了私人 我的公钥如下- 我认为我的公钥应该是PEM格式: 但是,我不知道如何将其转换为上述格式。需要帮助! 提前感谢。

  • 这是我生成RSA密钥的代码 现在我想转换DER/ASN.1编码字节,也知道使用Java JCE API生成RSA密钥时使用的默认编码格式是什么。

  • 我的公共在ssh-rsa是: ssh rsa aaaab3nzac1yc2aaaaaadaqabaababaqclaxt5s/wux04oxbt9r59wcl45omau3m0063lfyja7ovqavr7/2kHtLF/LoCQCXSZMny8RTCGDjoXD7G/tGsyHFDHCI//Y1VDLE06AlDzrlu69DQY91 6gkhghgjh3sf6us5hxlihrbsflf8g

  • 我如何在两种风格的公钥格式之间转换,一种格式是: 另一种格式是: 例如,我使用ssh-keygen命令生成id_rsa/id_rsa.pub对,我使用以下命令从id_rsa计算公钥: pub2的内容为: 根据我的理解,pub1和pub2包含相同的公钥信息,但是它们是不同的格式,我想知道如何在两种格式之间进行转换?谁能给我一些关于这两种格式的简明介绍吗?