node.js - 在node js中通过xml privateKey对字符串进行签名

标签 node.js private-key cryptojs

我有一个 sh1 散列字符串,我想通过我的 Node js 代码中的 xml 私钥对其进行签名。我该怎么做?我使用 crypto 来执行此操作,但它不支持 xml 私钥。所以可以吗请告诉我该怎么做?这是我的代码:

   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:无起始行”

最佳答案

使用Online Converter将您的XML key 转换为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----- ...

关于node.js - 在node js中通过xml privateKey对字符串进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52912510/

相关文章:

javascript - 使用 python 重新创建 CryptoJS Hmac

java - 如何在 java 服务器端解密 cryptojs AES 加密消息?

javascript - 无法使用 CryptoJS 解密字符串

node.js - 如何使用全局安装的 Karma 插件

c# - 如何在C#中使用公钥和私钥加密技术

node.js - 使用 passport.js 交换/转储 session 数据

java - 如何将Base64编码的pkcs12内容转换为java.security.PrivateKey?

openssl - "BEGIN RSA PRIVATE KEY"和 "BEGIN PRIVATE KEY"之间的区别

RFC3986 之前的 URL 的 Node.js URL 编码(使用 + 与 %20)

node.js - Parceljs 捆绑问题