javascript - 如何格式化OpenSSL密钥以匹配在线示例(JSBN-ECC)

原文 标签 javascript ruby openssl elliptic-curve diffie-hellman

我希望能够将openssl-ruby中的椭圆曲线diffie hellman的公钥格式化为类似于这个在线示例(link),因为我一直在使用这个js库。
下面的代码生成一个openssl::pkey::ec公钥和私钥

#Ruby
ec = OpenSSL::PKey::EC.new('secp128r1')
ec.generate_key

ec.private_key
#--> 205607153615223513963863936713567041725

ec.public_key.to_bn
#--> 499599043529551953518354858381998373780459818901085313561109939106744612770290

尝试复制上面的私钥205607153615223513963863936713567041725并将其作为alices的私钥粘贴到联机(link)上。但是,首先单击secp1284r1按钮以获得相同的曲线参数,然后单击Compute Public按钮。
它将从输入的私钥生成公钥然而,ruby openssl文档并不是很有帮助,我一直在想如何转换上面生成的公钥:
499599043529551953518354858381998373780459818901085313561109939106744612770290

变成这样(从网上看):
x: 107060165679262225845922473865530329196
y: 109296969851421346147544217212275741170

我假设通过适当地转换一个,它可以在某种程度上变得与另一个相等,因为它们有相同的曲线参数。还是我错了?(而且由于默认的point_conversion_form格式是:uncompressed,因为我刚刚测试过)请帮助。
另外,你可能想知道为什么我需要把公钥转换成另一个。不,我真的不需要。我只想学习如何转换它,因为我将使用该方法来转换类似的东西。为了便于测试,这是一个简单的问题。

最佳答案

杰伊·阿尔,
你不应该觉得你的解决方案很奇怪,因为我认为对ec.public_key.to_bn的调用可能会遵循rfc5480 section 2.2re:subject public keys,它声明:
2.2条主题公钥
八进制字符串的第一个八进制表示密钥是否
压缩的或未压缩的显示未压缩的表单
由0x04表示,压缩形式由0x02或
0x03(见[sec1]中的2.3.3)。如果
任何其他值都包含在第一个八位字节中。
假设是这样,既然你说的格式是:未压缩,你自己的回答对我来说完全有意义。谢谢你贴出来:)

相关文章:

android - 与NDAP级别相比,Android NDK平台版本的确切意义是什么?

php - 我的SELECT表单元素由JavaScript创建时快要消失了

javascript - Javascript中的range(31-40)字符串的parseInt

javascript - 优化阵列过滤

jquery - Foundation 5顶部栏下拉菜单随机不起作用,但是刷新页面后才起作用

ruby - 无法运行rake或rails命令(如rails c)-libcrypto错误

ruby-on-rails - 需要有关Chat App的MongoDB Schema的建议。嵌入式vs相关文档

linux - 无法获取md5哈希

javascript - Angular JS条件CSS类不起作用

c - 如何从OpenSSL中的perl脚本生成程序集文件