繁体   English   中英

在 Node.js 中使用 Base-64 PKCS-8 进行签名/解码

[英]Signing/Decoding with Base-64 PKCS-8 in Node.js

目前正在努力尝试与 Walmart Partners API 建立联系,并且他们的密码学存在一些问题,我在 Javascript/Node.js 中没有找到任何文档化的帮助。

文档指出:

通过以下方式签署此数据的字节数组表示:

解码您的私钥的 Base-64、PKCS-8 表示。 请注意,密钥是使用 PKCS-8 编码的。 各种语言的库提供了指定密钥采用这种格式而不是其他冲突格式(如 PKCS-1)的能力。

使用您的密钥的此字节表示使用 SHA-256 和 RSA 对数据进行签名。

使用 Base-64 对生成的签名进行编码。

我有私钥,并找到了很好记录的“chilkat”包。 唯一的问题是我们的开发系统是 Windows,在 Windows 10 64 位上存在问题。 如果我使用 64 位,它不会识别为 64 位系统,因此我什至无法安装该软件包。

此外,似乎 chilkat 包至少需要 Node 版本 4,我们尝试升级到 Node 4 以使用它,并且由于我们使用了一些其他包,该项目目前无法在没有一些错误的情况下使用该版本。 所以至少在这些错误得到解决之前,节点 4 不是一个选择,这似乎奇尔卡特不在画面中......

所以我找到了 anotehr NPM 包来帮助解决这个问题: https : //github.com/rzcoder/node-rsa

使用那个包,我在解码/签名工作时遇到问题......我发现文档很混乱,我发现类似问题的唯一帮助是在 C# 中......

关于如何使用 node-rsa 包实现沃尔玛要求的任何建议?

使用node-rsa ,我能够分两步生成有效的 Walmart API 签名:

const NodeRSA = require('node-rsa');

// 1. Decode the private key with base64 then pkcs8
const key = new NodeRSA();
key.importKey(new Buffer(encodedPrivateKey, 'base64'), 'pkcs8-private-der');
const privateKey = key.exportKey();

// 2. Sign the data with the decoded private key and sha256 then encode it with base64
const data = `${consumerId}\n${url}\n${method}\n${timestamp}\n`;
const signature = new NodeRSA(privateKey, {signingScheme: 'sha256'}).sign(data).toString('base64');

使用node-rsa ,解密解决方案。

const NodeRSA = require('node-rsa')
var key = NodeRSA(privateKey, 'pkcs8-private-pem', {'environment': 'node', 'encryptionScheme': 'pkcs1', 'signingScheme': 'sha256'}); 
var data = key.decrypt(encrypted, 'utf-8')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM