cryptopp base64编码/解码后的值不相同 [英] Value after cryptopp base64 encoding/decoding not the same

查看:116
本文介绍了cryptopp base64编码/解码后的值不相同的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在用cryptopp玩,对Base64编码/解码有麻烦.

I'm playing with cryptopp and have trouble with Base64 encoding/decoding.

在下面的代码中,假设 sig 的值应等于 tsig ,但在最后一个字符上它们是不同的( sig 大于然后为 tsig (一个符号).我试过也更改了 Base64Encoder 中的 insertLineBreaks 参数,但是结果是相同的....

In the following code hypothetically sig value should be equal tsig, but they are different on a last character (sig bigger then tsig by one symbol). I've tried also change insertLineBreaks parameter in Base64Encoder but the result is same. ...

RSASSA_PKCS1v15_SHA_Signer privkey(privateKey);
SecByteBlock sbbSignature(privkey.SignatureLength());
privkey.SignMessage(rng, (byte const*) strContents.data(),
    strContents.size(),sbbSignature);

Base64Encoder b(new StringSink(signedData));
b.Put(sbbSignature.begin(), sbbSignature.size());

string sig;
StringSink sinksig(sig);
sinksig.Put(sbbSignature.begin(), sbbSignature.size());

string tsig;
StringSource ss(signedData, true, 
    new Base64Decoder(
        new StringSink(tsig)
    )
);

我的错误在哪里?

推荐答案

b.Put(sbbSignature.begin(), sbbSignature.size());

尝试:

b.Put(sbbSignature.begin(), sbbSignature.size());
b.MessgeEnd();


这看起来不太正确:


This does not quite look right:

SecByteBlock sbbSignature(privkey.SignatureLength());
privkey.SignMessage(rng, (byte const*) strContents.data(),
    strContents.size(),sbbSignature);

尝试:

size_t maxLength = privkey.MaxSignatureLength();
SecByteBlock sbbSignature(maxLength);

size_t signatureLength = privkey.SignMessage(rng,
    (byte const*) strContents.data(), strContents.size(),
    sbbSignature);

if(maxLength != signatureLength)
    sbbSignature.resize(signatureLength);


Crypto ++ Wiki上有一个示例,位于带有附录的RSA签名方案,但我看了看就觉得错了.


There's an example on the Crypto++ wiki at RSA Signature Scheme with Appendix, but I think its wrong after looking at it.

这篇关于cryptopp base64编码/解码后的值不相同的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆