[英]Encoding a binary as BASE64 in Java and decoding it in node.js
[英]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.