我正在使用CryptoPP对字符串“abc”进行编码,问题是编码的base64字符串总是有一个尾随的'0x0a'? 这是我的代码:
#include <iostream>
#include <string>
using namespace std;
#include "crypto/base64.h"
using namespace CryptoPP;
int main() {
string in("abc");
string encoded;
CryptoPP::StringSource ss(
in,
true,
new CryptoPP::Base64Encoder(
new CryptoPP::StringSink(encoded)
)
);
cout << encoded.length() << endl;// outputs 5, should be 4
cout << encoded;
}
字符串“abc”应编码为“YWJj”,但结果为YWJj \ n,(\ n == 0x0a),长度为5。
更改源字符串没有帮助,任何字符串都将使用尾随\ n加密 这是为什么? 感谢
答案 0 :(得分:6)
从Base64Encoder docs开始,构造函数的签名是
Base64Encoder (BufferedTransformation *attachment=NULL, bool insertLineBreaks=true, int maxLineLength=72)
因此,您在编码字符串中默认获得换行符。为避免这种情况,请执行以下操作:
CryptoPP::StringSource ss(
in,
true,
new CryptoPP::Base64Encoder(
new CryptoPP::StringSink(encoded),
false
)
);