使用Crypto ++,RSA签名验证失败

时间:2018-03-31 08:51:32

标签: c++ cryptography rsa crypto++

我是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;
}

0 个答案:

没有答案