我是crypto ++的新手,并构建了我的第一个需要遵循OOP概念的应用程序,以便我进一步构建。
你能发现什么是错误的,因为下面的verifysignature函数返回false?
Mysample应用为每个用户提供了一个电子钱包,用户可以将钱转发给另一个用户的钱包。我创建了一个钱包类,并在构造函数中实例化了RSA :: Public和RSA :: PrivateKey。我创建了一个事务类,用于保存使用发件人的PrivateKey创建的签名。但是在使用发件人的公钥验证签名时,验证失败。
// Wallet Constructor
Wallet::Wallet()
{
///////////////////////////////////////
// Pseudo Random Number Generator
CryptoPP::AutoSeededRandomPool rng;
///////////////////////////////////////
// Generate Parameters
CryptoPP::InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(rng, 3072);
m_privateKey = CryptoPP::RSA::PrivateKey(params);
m_publicKey = CryptoPP::RSA::PublicKey(params);
}
std::string Signature::SignData(std::string data, CryptoPP::RSA::PrivateKey senderPrivateKey )
{
std::string signature("");
CryptoPP::AutoSeededRandomPool rng;
Signer signaturePen(senderPrivateKey);
CryptoPP::InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(rng, 3072);
CryptoPP::StringSource ss(data, true,
new CryptoPP::SignerFilter(rng, signaturePen,
new CryptoPP::StringSink(signature)));
return signature;
}
bool Signature::VerifySignature(CryptoPP::RSA::PublicKey senderPublicKey,
const std::string &data,
const std::string &SignatureStr)
{
Verifier signatureVerifier(senderPublicKey);
// verify message
bool result = false;
CryptoPP::StringSource ss2(data+SignatureStr, true,
new CryptoPP::SignatureVerificationFilter(signatureVerifier,
new CryptoPP::ArraySink((CryptoPP::byte*)&result,
sizeof(result))));
return result;
}