我们的系统将通过身份验证服务器调用 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)
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)
| 归档时间: |
|
| 查看次数: |
11984 次 |
| 最近记录: |