我有一组公钥/私钥,在仅使用加密和解密的两种方法之一加密/解密某些数据时,它可以完美无缺。
我仍然没有运气尝试用两者之一加密数据并用另一个解密。
示例方案:
a) 我使用公钥和以下 node.js 代码创建了一些加密数据:
#!/usr/bin/env node
var NodeRSA = require('node-rsa');
var fs = require('fs');
function createUsingPubKey(Pub, data) {
var pk = new NodeRSA();
pk.importKey(Pub);
encrypted = pk.encrypt(data, 'base64');
return encrypted;
}
var sampledata = "SECRET STUFF";
var genkey = createUsingPubKey(fs.readFileSync('id_rsa.pub'), sampledata)
console.log(genkey);
Run Code Online (Sandbox Code Playgroud)
b)然后我尝试使用 openssl 实用程序解密它:
node test.js | openssl base64 -d -A | openssl rsautl -inkey id_rsa
Run Code Online (Sandbox Code Playgroud)
但我得到:
RSA operation error
1068:error:0406706C:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data greater than mod len:.\crypto\rsa\rsa_eay.c:680:
Run Code Online (Sandbox Code Playgroud)
我认为他们可能会在加密/解密过程中使用不同的算法,所以我前往这里的 node-rsa 文档:https : //www.npmjs.com/package/node-rsa,我找到了这个选项:
encryptionScheme — 加密/解密的填充方案。可以是“pkcs1_oaep”或“pkcs1”。默认'pkcs1_oaep'。 …
目前正在尝试与 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 来使用它,而由于我们使用的其他一些包,该项目目前无法在没有一些错误的情况下使用该版本。因此,至少在这些错误得到解决之前,Node 4 不是一个选择,看来 Chilkat 已经被排除在外了……
所以我找到了另一个 NPM 包来协助解决这个问题: https: //github.com/rzcoder/node-rsa
使用该包,我在解码/签名工作时遇到问题...我发现文档非常混乱,我发现类似问题的唯一帮助是在 C# 中...
关于如何通过 node-rsa 包实现沃尔玛要求的任何建议?