因此,我目前正在研究网络的工作原理。我从Wireshark得到了一堆数据包,这些数据包已经复制到缓冲区中(只有内容,没有标题。Wireshark->关注TPC流-> C数组)。我可以理解协议(protocol),但是在第三个数据包中需要进行密钥交换。经过一番谷歌搜索后,我发现我需要RSA加密。它向我发送了一个公钥+ token 。并且我应该返回我之前收到的加密共享密钥(刚刚生成)和加密 token 。
RSA_key需要指数和模数,所以我的问题是:如何从单个char []缓冲区(公共(public)密钥)创建RSA_key对象。
注意:经过长时间的谷歌搜索,我要在这里发布。我可能不会使用正确的关键字,因为我不会说英语。我可以找到仅用php询问的线程。
我发现最有用的(我认为)链接是http://www.techper.net/2012/06/01/converting-rsa-public-key-modulus-and-exponent-into-pem-file/
谢谢。
附言我正在嗅探《我的世界》并模拟客户端(我之所以选择它,是因为它很流行,我知道如果被卡住,我会在网上找到资源)。但是我的问题是如何从公钥获取模数和指数,其格式为:http://pastebin.com/J9ddhgW5(即表示公钥的字节)
哦,我忘了,第一列是字节位置,第二列是类型转换为int的字节值,第三列再次是值,但是(int)(unsigned char),所以我可以看到它的+127,第四列是的十六进制表示该值和最后一列是基于ascii表的字符(如果其可见字符)。
最佳答案
您发布的数据是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编码的文件(如此文件)中获取公共(public)密钥。关于c++ - 使用Openssl和C++从公钥中提取模数和指数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12120862/