2013-11-25 41 views
1

我正在构建一个与API服务器交谈的nodejs应用程序。 API服务器要求我对它做出的每个请求都包含一个X-Signature标头,其中使用prime256v1 ECDSA曲线和sha256散列关于特定数据集。十六进制编码node.js中的ECDSA密钥

我查看了cryptotls文档,但没有找到任何合适的东西。我已成功生成openssl ecparam -name prime256v1 -genkey的私钥,但它是PEM格式。我还生成了一个DER格式密钥。这些都包括一些额外的元数据,如使用的曲线和PEM的情况下的评论。

我可以用这些键在我身边签名操作,但服务器要求我使用十六进制编码上传公钥(这样服务器可以验证我做我的请求签名。)

具体的服务器需要类似下面的Python代码的输出:

from ecdsa import SigningKey 
from binascii import hexlify 
hexlify(SigningKey.from_pem(content).to_string()) 

样本输出为PUBKEY(不换行):c5bd76cd0cd948de17a31261567d219576e992d9066fe1a6bca97496dec634e2c8e06f8949773b300b9f73fabbbc7710d5d6691e96bcf3c9145e15daf6fe07b9

我宁愿不加入蟒蛇作为一个依赖于我节点应用.. 。任何人都知道我可以从PEM或DER文件中提取代表我的私钥的二进制数据,所以我可以将它放入缓冲区并致电buffer.toString('hex')?或者我可以使用本地crypto库来生成ECDSA密钥对?或者一个会做同样的事情的图书馆?

回答

0

openssl本身可以打印出十六进制的内容。

Doe的关键变化?听起来像你可以解码成十六进制一次,并使用它?不需要依赖性 - 只需将十六进制粘贴到节点源中即可?