在 Node.js 中使用私钥和“SHA256 with RSA”算法生成签名

4 node.js rsa-sha256

我们的系统将通过身份验证服务器调用 API。这个服务器是用java构建的,需要大量的密钥加密。一项要求是使用“SHA256 with RSA”算法使用客户端(我们)的私钥生成签名。我已经用 Java 做到了这一点,但不确定它是否正确。Rur 服务器是用 Nodejs 编写的。如何将下面的 Java 代码转换为 Node.js?

public static String signSHA256RSA(String input, String strPk) throws Exception {
    Security.addProvider(new BouncyCastleProvider());
       // Remove markers and new line characters in private key
       String realPK = strPk.replaceAll("-----END PRIVATE KEY-----", "")
                            .replaceAll("-----BEGIN PRIVATE KEY-----", "")
                            .replaceAll("\n", "");

       byte[] b1 = Base64.getDecoder().decode(realPK);
       PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(b1);
       KeyFactory kf = KeyFactory.getInstance("RSA");

       Signature privateSignature = Signature.getInstance("SHA256withRSA");
       privateSignature.initSign(kf.generatePrivate(spec));
       privateSignature.update(input.getBytes("UTF-8"));
       byte[] s = privateSignature.sign();
       return Base64.getEncoder().encodeToString(s);
}
Run Code Online (Sandbox Code Playgroud)

Hay*_*hat 6

NodeJS 包中有一个内置实用程序crypto,可以帮助您完成此任务

更多信息请参见https://nodejs.org/api/crypto.html#crypto_class_sign

这是文档中的示例


const { privateKey, publicKey } = crypto.generateKeyPairSync('ec', {
  namedCurve: 'sect239k1'
});

const sign = crypto.createSign('SHA256');
sign.write('some data to sign');
sign.end();
const signature = sign.sign(privateKey, 'hex');

const verify = crypto.createVerify('SHA256');
verify.write('some data to sign');
verify.end();
console.log(verify.verify(publicKey, signature, 'hex'));
// Prints: true
Run Code Online (Sandbox Code Playgroud)