digital-signature - 使用 Crypto++ 使用私钥签名;SHA1 与惠而浦
问题描述
我根据此处的 RSA-PSSR-Filter-Test.zip 示例使用 crypto++ ,它可以工作。
我正在尝试找到可以可靠地用于使用私钥签署消息并在 Qt 应用程序中以编程方式使用公钥验证其来源的东西。
我很高兴在验证签名时实际上可以提取消息:
StringSource(signature, true,
new SignatureVerificationFilter(
verifier,
new StringSink(recovered),
SignatureVerificationFilter::THROW_EXCEPTION | SignatureVerificationFilter::PUT_MESSAGE) // SignatureVerificationFilter
); // StringSource
assert(ui->plainTextEdit->toPlainText().toStdString() == recovered);
但是 SHA1 是不安全的。
然后我在Whirlpool 中找到了这个例子。但是,它似乎没有提取实际的原始消息,只是声称要验证它。这段代码是否真的验证了消息?ArraySink 的用法对我来说似乎有点深奥,所以我无法分辨。
bool result = false;
Verifier verifier(publicKey);
CryptoPP::StringSource ss2(decodedSignature + aMessage, true,
new CryptoPP::SignatureVerificationFilter(verifier,
new CryptoPP::ArraySink((byte*)&result,
sizeof(result))));
return result;
我尝试将代码转换为类似于 SHA1 示例,但这不会提取任何消息:
CryptoPP::StringSource ss2(decodedSignature, true,
new CryptoPP::SignatureVerificationFilter(verifier,
new StringSink(recovered)));
是否可以使用 Whirlpool 转换此代码以实际从签名中提取消息,或者实际消息是否不包含在签名中,尽管它看起来是 PSSR?
我也想知道这里“新”分配的使用;这段代码真的会泄漏内存吗?
对于任何错误的术语,我深表歉意;我不在安全领域。
解决方案
结果原来的RSA-PSSR-Filter-Test.zip 示例可以修改为使用 SHA3,例如通过使用枚举值 SHA3_512 而不是它出现的 SHA1。(您还需要修改一些标头包含和使用指令。)仍然不确定为什么我无法从 Whirlpool 示例中得到响应。有关邮件列表的更多详细信息。
推荐阅读
- umbraco - Umbraco 7.4 URL 重定向功能
- typescript - X 类型的参数不能分配给 Y 类型的参数(尽管有继承)
- regex - 结构替换可能复杂的 RegexReplace 解决方案?
- r - 使用 lme4 自定义引导置信区间
- sql-server - SQL Server 中的正则表达式 - 连字符分隔的字符串
- javascript - javascript 将函数对象传递给网络工作者 - 无法克隆错误 DataCloneError
- swift - 如何在 swiftUI 中添加拖动手势以便更改视图?有点像 Snapchat,向右滑动可以让你看到故事?
- javascript - 将日期添加到数组的 Javascript for 循环会冻结某些 PC 上的页面
- c# - 尝试运行 Web 应用程序时出现 System.InvalidOperationException
- terraform - GCP 范围的 Terraform 变量