希望有人能够在这里给我一点帮助。
我需要生成一个 1024 位 RSA key 供一次性使用(每次运行后都会被丢弃)并将公钥传递给远程客户端。远程客户端期望 key “采用 x509 中定义的 ASN.1 格式”。 (我知道如何首先使用 openssl 制作私钥,然后如何提取公钥 - 都是 ascii 格式。我坚持转换为 ASN.1,它需要为十六进制)
它用于与 Minecraft 客户端通信时使用。 (我写的就是服务端)
以下是我必须处理的信息,描述了所需内容: http://wiki.vg/Protocol_Encryption#Key_Exchange (特别是 key 交换部分)
我理想情况下需要在 Node.js 中执行此操作。 (或者如果可以的话,对 openssl 的系统调用就可以了)
!((此行下方的信息可能不相关))
这个想法是我将 ASN.1 格式的公钥发送给客户端。客户端加密密码并将其发送回我(服务器),我需要解密并存储密码以供以后使用。
我的服务器是用node.js编写的,因此如果我能在node.js中完成它,或者通过调用openssl作为命令提示符,我将非常感激。
请注意,我对 ASN.1 知之甚少,所以我可能遗漏了一些明显的东西。 (希望如此)
我在谷歌上搜索了几个小时,发现了很多与该主题相关的内容,但我要么无法正确理解它们,要么根本无法使它们发挥作用。
需要明确的是 - 我不希望使用 ASN.1 加密任何数据 - 我只需要以 ASN.1 格式将公钥发送到客户端。 (想必我可以使用开始时生成的私钥轻松解密通过调用 openssl 发回的加密密码)
如果有人可以在这里帮助我,我将非常感激。
詹姆斯
最佳答案
为了获得我需要的东西(使用 openssl),我执行了以下操作:
1 生成私钥
openssl genrsa -out private_key 1024
2 导出公钥
openssl rsa -in private_key -pubout -out public_key
3 以DER格式导出公钥,这似乎是我需要的ASN.1格式。
openssl rsa -outform der -pubin -in public_key -pubout -out public_key.asn1
解密从 Minecraft 客户端发回的 key
openssl rsautl -decrypt -inkey private_key -in encrypted_data_in -out data_out
希望对某人有帮助。 :)
关于javascript - 生成 1024 位 RSA key 对并将公钥以 ASN.1 格式(十六进制)保存在 node.js 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749588/