使用Openssl和C ++从公钥中提取模数和指数

时间:2012-08-25 09:41:15

标签: c++ cryptoapi

所以我正在研究网络的运作方式。我有一堆来自wireshark的数据包,我已经在缓冲区中复制了(只有内容,没有标题.Wireshark->关注TPC Stream-> C数组)。我可以理解协议,但在第3个数据包中它需要密钥交换。经过一些谷歌搜索后,我发现我需要RSA加密。它向我发送了一个公钥+令牌。我回复加密的共享密钥(刚刚生成)和我之前收到的加密令牌。

RSA_key需要指数和模数,所以我的问题是:如何从单个char []缓冲区(公钥)创建RSA_key对象。

注意:经过长时间的谷歌搜索,我在这里发帖。我可能没有使用正确的关键字,因为我不是说英语的人。我可以找到只用php询问这个问题的线程。 我发现最有用的(我认为)链接是http://www.techper.net/2012/06/01/converting-rsa-public-key-modulus-and-exponent-into-pem-file/

感谢。

P.S。我正在嗅探我的天文并模拟客户端(我之所以选择它是因为它的流行游戏,我知道如果我遇到困难,我会在网上找到资源)。但是,我的问题是如何从公钥中获取模数和指数格式为:http://pastebin.com/J9ddhgW5(即表示公钥的字节)

哦,我忘记了,第一列是字节位置,第二列是字节值到int的类型,第3列是值但是(int)(unsigned char)所以我可以看到它的+127,第4列是否是值的十六进制表示,最后一列是基于ascii表的字符(如果是可见字符)。

1 个答案:

答案 0 :(得分:1)

您发布的数据是ASN.1编码(DER)RSA公钥:

$ openssl ssl rsa -inform der -pubin -text < 12120862.key 
Public-Key: (1024 bit)
Modulus:
    00:81:1f:1d:00:7e:d0:c7:e2:2f:31:3d:0d:f0:a8:
    ab:c1:ea:66:ba:af:1d:a4:eb:b3:fd:51:58:1c:1d:
    81:ae:f0:99:9e:5c:26:67:b5:41:14:28:79:c0:29:
    e5:56:96:06:b7:4b:a0:c9:7f:41:46:9a:7e:85:10:
    a0:91:ea:58:bd:78:78:6d:3c:07:2a:3d:61:f3:ed:
    42:8b:1e:dc:6d:2d:21:41:7a:e8:15:51:0d:75:84:
    be:20:8c:76:43:8b:4b:67:6b:49:09:e9:20:a1:11:
    53:a0:d9:30:b1:c2:27:a6:09:e1:56:36:ed:7e:9b:
    23:e2:df:5b:bd:c5:66:ca:c5
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBHx0AftDH4i8xPQ3wqKvB6ma6
rx2k67P9UVgcHYGu8JmeXCZntUEUKHnAKeVWlga3S6DJf0FGmn6FEKCR6li9eHht
PAcqPWHz7UKLHtxtLSFBeugVUQ11hL4gjHZDi0tna0kJ6SChEVOg2TCxwiemCeFW
Nu1+myPi31u9xWbKxQIDAQAB
-----END PUBLIC KEY-----

在OpenSSL中,您可以使用d2i_RSA_PUBKEY函数从ASN.1编码的文件中获取公钥(如此)。