簡體   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