2017-01-23 6 views
2

Я использую Crypto ++ library. У меня есть строка base64, сохраненная как CString. Я хочу преобразовать свою строку в Integer. на самом деле это base64, построенный из Integer, и теперь я хочу преобразовать в Integer again.but два Integer не равно. В других словах второй Integer не равен оригинальному Integer.Как преобразовать base64 в Integer в Crypto ++?

Base64Decoder bd; 
CT2CA s(c); 
std::string strStd(s); 

bd.Put((byte*)strStd.data(), strStd.size()); 
bd.MessageEnd(); 

word64 size = bd.MaxRetrievable(); 
vector<byte> cypherVector(size); 

string decoded; 
if (size && size <= SIZE_MAX) 
{ 
    decoded.resize(size); 
    bd.Get((byte*)decoded.data(), decoded.size()); 
} 

Integer cipherMessage((byte*)decoded.data(), decoded.size()); 
+0

Как вы разобрались с этой проблемой? Если приведенный ниже код не работает для вас, нам нужно будет увидеть некоторые кодированные Base64 данные, чтобы мы могли запускать вашу программу с реальными данными. – jww

ответ

0
string decoded; 
if (size && size <= SIZE_MAX) 
{ 
    decoded.resize(size); 
    bd.Get((byte*)decoded.data(), decoded.size()); 
} 

У вас есть строка с именем decoded, но вы никогда не декодировать данные, запустив его через Base64Decoder.

Используйте что-то вроде следующего. У меня нет проекта MFC, пригодного для тестирования, поэтому я собираюсь предположить, что вы преобразовали CString в std::string.

// Converted from Unicode CString 
std::string str; 

StringSource source(str, true, new Base64Decoder); 
Integer value(val, source.MaxRetrievable()); 
std::cout << std::hex << value << std::endl; 

StringSource является BufferedTransformation. Integer конструктор you are using is:

Integer (BufferedTransformation &bt, size_t byteCount, Signedness sign=UNSIGNED, ByteOrder order=BIG_ENDIAN_ORDER) 

В промежутках между StringSource и Integer является Base64Decoder. его фильтр, который декодирует строку «на лету». Таким образом, данные поступают из источника (StringSource) в раковину (конструктор Integer).

См. Также Pipelines в вики Crypto ++.