【问题标题】:Crypto++ verify large file signatureCrypto++ 验证大文件签名
【发布时间】:2018-10-28 01:28:31
【问题描述】:

我使用此代码通过 crypto++ 验证消息:

CryptoPP::ECDSA<CryptoPP::ECP, CryptoPP::SHA256>::Verifier verifier(key);
bool result = verifier.VerifyMessage( (const CryptoPP::byte*)message.data(), message.length(), (const CryptoPP::byte*)signature.data(), signature.length() );

现在我想验证我之前为文件创建的签名。该文件非常大(GB),我不想将它一次性加载到内存中(到消息变量)。

crypto++有没有办法验证大文件的签名?

【问题讨论】:

  • 为什么不使用sha256md5 哈希码来验证文件??
  • 我想签署文件,这样没人可以修改它。
  • 所以,使用文件的哈希码就可以做到。如果您有文件hash 代码并且有人只修改了文件的bit,那么文件的hash 代码将会更改...实际上hash 代码是文件的标志。
  • 相信我,非对称加密签名是我需要使用的方式。文件和签名从不安全的环境中传给我的验证者。如果我只使用哈希,攻击者可以简单地提供修改后的文件和重新计算的哈希。
  • 你试过this修改为FileSource吗?

标签: c++ crypto++


【解决方案1】:

这段代码可以满足我的需要:

 CryptoPP::ECDSA<CryptoPP::ECP, CryptoPP::SHA256>::PublicKey key; key.Load(queue);
 CryptoPP::ECDSA<CryptoPP::ECP, CryptoPP::SHA256>::Verifier verifier(key);

 CryptoPP::SignatureVerificationFilter verificationFilter(verifier, NULL, CryptoPP::SignatureVerificationFilter::SIGNATURE_AT_BEGIN);
 CryptoPP::FileSource fileSource( file, false, new CryptoPP::Redirector(verificationFilter));
 CryptoPP::StringSource signatureSource( (const CryptoPP::byte*)signature.data(), signature.length(), false, new CryptoPP::Redirector(verificationFilter));
 signatureSource.Pump(signature.length());
 fileSource.PumpAll();

 return verificationFilter.GetLastResult();

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多