关于Bouncy Castle中RSADigestSigner与DSASigner的技术咨询
Bouncy Castle签名器使用疑问解答
1. RSADigestSigner的哈希处理逻辑
RSADigestSigner内置哈希运算能力,你只需在初始化时传入指定的哈希算法实例(比如代码里的SHA512Digest),直接传入原始消息字节即可——签名器会在内部完成消息的哈希计算,再执行RSA签名操作。
你当前的RSADigestSigner代码是正确的:
// RSADigestSigner // Pick the hash, SHA512 in this case SHA512Digest digest = new SHA512Digest(); // Create a RSADigestSigner to sign RSADigestSigner sign = new RSADigestSigner(digest); // Initialize for signing sign.init(true, privKey); // Pass data to sign(直接传入原始消息字节,内部会自动哈希) sign.update(bytes, 0, bytes.length); // Generate the signature try { signature = sign.generateSignature(); } catch (DataLengthException | CryptoException e) { e.printStackTrace(); }
2. DSASigner的哈希处理要求
DSASigner是纯签名实现,没有内置摘要功能,必须在调用签名方法前自行完成消息的哈希计算,再将哈希值传入generateSignature方法。
补充哈希步骤的完整示例代码:
// Create a DSASigner to sign DSASigner sign = new DSASigner(); // Initialize DSASigner sign.init(true, privKey); // Hash the message(必须预先哈希,这里以SHA-256为例) SHA256Digest digest = new SHA256Digest(); digest.update(rawMessageBytes, 0, rawMessageBytes.length); byte[] hash = new byte[digest.getDigestSize()]; digest.doFinal(hash, 0); // Generate the signature(传入哈希值而非原始消息) signature = sign.generateSignature(hash);
注意:DSA算法对哈希算法有对应要求,早期DSA仅支持SHA-1,现在部分版本支持SHA-2系列,需确保哈希算法与DSA密钥的参数匹配。
内容的提问来源于stack exchange,提问作者user21866347
相关产品推荐
相关产品推荐

