目前正在努力与Walmart Partners建立联系,并且他们的密码学存在一些问题,而且我在Javascript/Node中没有找到任何对此有记录的帮助。
这些文件指出:
通过以下方式对此数据的字节数组表示形式进行签名: 解码基-64,PKCS-8表示您的私钥。注意,密钥是使用PKCS-8编码的。各种语言的库提供了一种能力,可以指定键是这种格式的,而不是其他冲突的格式,例如PKCS-1。 使用密钥的这个字节表示来使用RSA使用SHA-256对数据进行签名。 使用Bas-64对结果签名进行编码。
我有私钥,并找到了"chilkat“包,这是很好的记录。唯一的问题是我们的开发系统是Windows,在Windows 10 64位上有一个问题。如果我使用64位,它不会识别为64位系统,所以我甚至无法安装软件包。
另外,chilkat包似乎至少需要Node version 4,我们尝试升级到Node 4来使用这个版本,而且由于我们使用的其他包,项目目前无法使用该版本而没有一些bug。因此,至少在这些错误被解决之前,Node 4不是一种选择,似乎Chilkat已经不存在了.
所以我找到了anotehr NPM包来帮助处理这个问题:https://github.com/rzcoder/node-rsa
使用那个包,我很难让解码/签名开始工作.我发现这些文档非常令人困惑,而我在类似问题中找到的唯一帮助是在C#中.
对于如何实现沃尔玛要求的节点-rsa包,有什么建议吗?
发布于 2017-05-04 14:35:09
使用节点-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');发布于 2021-11-28 17:14:23
使用节点-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')https://stackoverflow.com/questions/42638068
复制相似问题