You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:45:35