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

我希望能够将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)。如果
任何其他值都包含在第一个八位字节中。
假设是这样,既然你说的格式是:未压缩,你自己的回答对我来说完全有意义。谢谢你贴出来:)

译文:来源   文章分类: javascript ruby openssl elliptic-curve diffie-hellman

相关文章:

javascript - D3JS:在时间序列数据中将缺失的时间值插值为空

javascript - Google Analytics(分析):_gaq.push()是阻止函数吗?

javascript - 将方法应用于数组中的单个元素-jQuery / javascript

javascript - 承诺提示.js

javascript - javascript函数内部的代码用逗号代替,而不是分号。

javascript - 有没有办法在webview中拦截javascript触发的URL?

javascript - 调用函数setBlinkFont()时出现未捕获的Referenceerror

javascript - Jison:为AND和OR生成具有多个子代的AST节点

javascript - 将document.ready函数移至单独的javascript函数?

javascript - jqplot组并用相同的名称和颜色标记几个数据系列