在节点 js 中通过 xml 私钥对字符串进行签名



我有一个 sh1 哈希字符串,我想在我的节点 js 代码中用 xml 私钥对其进行签名。我该怎么做?我使用加密来做到这一点,但它不支持xml私有 key.so 任何人都可以告诉我该怎么做吗?这是我的代码:

var sha1 = crypto.createHash('sha1');
const crypto = require('crypto');
const sign = crypto.createSign('RSA-SHA1');
const TerminalCode = 123;
const MerchantCode = 4566;
const privateKey ="<RSAKeyValue><Modulus>tew9OJzFRBF0UbAU5M3vF18UDWxCseQkWtQI7tTrQcJisT31oqSv0uvwx3zQf0oGj9VnxeNeytm+xFxVt1lq+oGP5icJdiFdPHl2P5lD+T4sEyKGsiuPqXXkpWG3oY1V2t4BHmnJTr4jPRYInSQi9RvOWDUtRlgFLEQxgV2flvc=</Modulus><Exponent>AQAB</Exponent><P>3ElB9JPqabnMPzr8K1Fi4qd8YxIdbJln2JMx54G0ISjMzhv29GW3g3jOpAAtKlR49HTnz5F4T65mWm3jRhK4NQ==</P><Q>02rAXLUMpPu/CByB2TamTkVDpRsDRteGZ2dBjtOB4D6YQir6hsuQpnhCR7vzz7p8IFf06flL/Ly7ZL1Bpo5v+w==</Q><DP>HYWX2D5GiRrEW6j9CJUkqnmFuwU/ekFo4GaBpqQETvlX0TuAMiq7mFwFXYdEhkrB1wkf0/qL5CncP7xAXDDADQ==</DP><DQ>WSN5V50+Z5F9Sf47AUp5dCbgDo0FJKlakd6HVaD38YRyzfMxDgRmSMoLqBMnCT6ndzuel8f0seshV6g0NfV4YQ==</DQ><InverseQ>g7bnQMwCsRSOtPCBYub7P4AHJgvv+kbc4Kacq0UlZk8f+uMSoPU14stoiNHeo3htW8rx/XySW72EuLG6ej6OWA==</InverseQ><D>nsISix0EaWpx//eRxDqSs+qdLTmU2nkl4L25LfNReomQZuyTN+RQK9kKvowFx49qOosZjG/ngU6UU/fgNakq2QkKw8D9w+cbwF7kyDpr6AkngfY0w+X3q5hZUEcCFKiA6P0nw55TvSoGvtQK+zAdVAjJGmHCZ4qIWzXLX1CcOUE=</D></RSAKeyValue>"


var string =`#${MerchantCode}#${TerminalCode}#123#$12344566#$12342326#http://kalno.ir/pasargad/payback#${1003}#$434536`
sha1.update(string);
sha1 = sha1.digest('hex');
sign.write(toString(sha1));
// sign.end();
privateKey = sign.sign(privateKey, 'base64')

但是当我这样做时,加密符号给了我一个错误,其中包含这个XML私钥不正确。错误:错误:0906D06C:PEM 例程:PEM_read_bio:无启动线">

使用在线转换器将您的 XML 密钥转换为 PEM,或使用 rsa-xml 等库在 Node 中转换它.JS

const RSAXML = require('rsa-xml');
const xmlKey = '<RSAKeyValue>...</RSAKeyValue>';
const pemKey = new RSAXML().exportPemKey(xmlKey);
console.log(pemKey); // -----BEGIN RSA PRIVATE KEY----- ...

最新更新