如何在Node.js的OpenPGP签名中改用SHA256哈希算法?
问题
我已成功使用OpenPGP的sign()函数完成消息签名,但当前签名默认使用SHA512哈希算法,请问如何将其修改为SHA256?以下是我的实现代码及签名输出:
async function pgpSignMessage(privateKey,messageToSign,callback) { const unsignedMessage = await openpgp.createCleartextMessage({ text: messageToSign }); const cleartextMessage = await openpgp.sign({ message: unsignedMessage, signingKeys: privateKey, }); console.log("pgpSignMessage cleartextMessage ",cleartextMessage ); return callback(cleartextMessage ); );
输出:
pgpSignMessage cleartextMessage -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 This is a testing message -----BEGIN PGP SIGNATURE----- wsBzBAEBCgAGBQJjTOMPACEJEPjzUwweaxTJFiEEcJyNNiL/3PuC/Rze+PNT DB5rFMnA2wf+OQV8+S1o12hrHgIOy362xHk7jk+bhUf2DzosyMIb5/FaP58a Y2VxZUOMkYPFJeiJ9dO7z+25QjbUgbZz5ikExdPIIwmfY1BPX8jgWEQAniOD ZZVg+pG2hALuZwzBchw+onvoPyyZLSNajkY4rA/wXexuAljWqWTpypoN51iQ O/E4TN2FbAIQOq89tzS5MXhEAZe4bYHH4cUwsQiaIjA+2OjrspPJt+3/nosP 1f6k6wgZKuPDbyK6KKSqtb0tzFmIVkF+4+VF+vQFi7kx5utWn/nXOWO78tUV s6dn23+GdJ5sLaFUT5vPDKux3dddErPOKEam/hJUe5VoO2LzeNO5Ww== =KsDz -----END PGP SIGNATURE-----
解决方案
在openpgp.sign()的配置参数中添加hashAlgorithms字段,指定使用SHA256算法即可。修改后的代码如下:
async function pgpSignMessage(privateKey, messageToSign, callback) { const unsignedMessage = await openpgp.createCleartextMessage({ text: messageToSign }); const cleartextMessage = await openpgp.sign({ message: unsignedMessage, signingKeys: privateKey, hashAlgorithms: [openpgp.enums.hash.sha256] // 明确指定SHA256哈希算法 }); console.log("pgpSignMessage cleartextMessage ", cleartextMessage); return callback(cleartextMessage); }
修改完成后,签名输出里的Hash:字段会自动变为SHA256,签名内容也会基于SHA256算法生成。
内容的提问来源于stack exchange,提问作者user1956818
相关产品推荐
相关产品推荐

