cryptopp base64编码/解码后的值不相同 [英] Value after cryptopp base64 encoding/decoding not the same
问题描述
我在用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屋!