[英]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.