The thing is operator<< is used for formatted text output, not binary.

There are read/write functions to deal with binary files.

Since you get binary data after encryption, you must open file in binary 
mode and use write() to put binary data to file.

FileSink with binary=true does exactly what you need.

If you still want to play with text, look at HexEncoder & HexDecoder filters

среда, 30 ноября 2022 г. в 03:19:24 UTC+7, 

> Ok nevermind i figured it out. For anyone in the future having the same 
> problem, here is a stackoverflow post solving my situation: 
> .Thanks a lot for the answers, the format thing you said helped a lot.
> On Tuesday, November 29, 2022 at 8:35:16 PM UTC+2 Nikos Karavidas wrote:
>> Ok so i got this figured out with this:
>> stringstream ss;
>>     for (int i = 0; i < ciphertext.size(); ++i)
>>     {
>>         ss << hex << (0xFF & static_cast<byte>(ciphertext[i])) << " ";
>>     }
>>     string mystr = ss.str();
>>     cout << "mystr: " << mystr << endl;
>> and it works fine, all characters are printed in hex and i can write them 
>> in a txt file, no problem. BUT when i read them from the txt file, i dont 
>> know how to convert them back from hex, so i can do the decryption.
>> On Tuesday, November 29, 2022 at 8:23:19 PM UTC+2 Nikos Karavidas wrote:
>>> I 've got the following function:
>>> void encrypt(string ivInString, string keyInString, const string 
>>> &filename_in, const string &filename_out)
>>> {
>>>     SecByteBlock iv(reinterpret_cast<const byte*>(&ivInString[0]), 
>>> ivInString.size());
>>>     SecByteBlock key(reinterpret_cast<const byte*>(&keyInString[0]), 
>>> keyInString.size());
>>>     CFB_Mode<AES>::Encryption e;
>>>     e.SetKeyWithIV(, key.size(),;
>>>     ifstream in{ filename_in, ios::binary };
>>>     ofstream out{ filename_out, ios::binary };
>>>     FileSource f{ in, /*pumpAll=*/true, new StreamTransformationFilter{ 
>>> e, new FileSink{out} } };
>>> }
>>> and a similar for decrypting, and they work fine, but this is to encrypt 
>>> any sort of file, which is my only way of encrypting the txt, but its not 
>>> what i need. What i need is to encrypt a string. The 1st answer in this 
>>> link: 
>>> , prints all the ciphered text in hex in the line that says "cout << "0x" 
>>> << hex << (0xFF & static_cast<byte>(ciphertext[i])) << " ";". But im not 
>>> sure how that hex part even works. Do you know how i can write that into a 
>>> txt file?
>>> On Tuesday, November 29, 2022 at 7:43:08 PM UTC+2 
>>> wrote:
>>>> Could you try to write a minimal working example in a separate project 
>>>> and share the code if you still have any issues? Try to write that 
>>>> encryption/decryption routines yourself line by line instead of copy&paste 
>>>> any examples.
>>>> The idea is simple: you read data source, you put data through the 
>>>> filter (which does the encryption or decryption) and put the result to the 
>>>> sink. So you should setup a source: read file in buffer and use 
>>>> StringSource or VectorSource or use FileSource. Then you should prepare an 
>>>> encryption filter (StreamTransformationFilter) with appropriate options 
>>>> (you could learn it from example code). Then you put the data into the 
>>>> Sink.
>>>> Remember to use same key & iv for decryption. Also binary/text mode is 
>>>> important when reading files. Also remember to use same mode (CBC, ECB, 
>>>> etc.) for both encryption/decryption algorithm. Use authenticated 
>>>> encryption to catch message checksum errors.
>>>> Try to experiment with pipelining, e.g. calculating messag digest and 
>>>> printing it in hex. When you get the strong feeling what works and what 
>>>> isn't you could easily use any encryption/decryption algorithm in 
>>>> Cryptopp. 
>>>> Just take some time to read wiki and experiment with library primitives. 
>>>> And good luck with that!
>>>> вторник, 29 ноября 2022 г. в 23:01:33 UTC+7, 
>>>>> Not sure what you mean by format, i just use something like 
>>>>> "myFileStream << cipher", and then read it back again. Do you mean that 
>>>>> the 
>>>>> txt file should be utf-8 or something like that? What would be the right 
>>>>> way to write the ciphered string to the txt file and read it afterwards? 
>>>>> Thanks a lot for answering btw.
>>>>> On Tuesday, November 29, 2022 at 4:15:37 PM UTC+2 
>>>>> wrote:
>>>>>> I think I have an idea of ​​what is happening to you, what happens 
>>>>>> that you must decrypt in the same format that you encrypted, since that 
>>>>>> happened to me at some point, you must also see the format in how you 
>>>>>> return the txt file, or the text of txt if it is the same format that is 
>>>>>> needed to decrypt it. Greetings.
>>>>>> El lunes, 28 de noviembre de 2022 a las 14:30:04 UTC-5, 
>>>>>> escribió:
>>>>>>> Ok so based on the example from this link   (
>>>>>>>,    i 
>>>>>>> have tried encrypting a "plain" string into a "cipher" string and 
>>>>>>> writing 
>>>>>>> that "cipher" string to a .txt file in one program, and in another 
>>>>>>> program 
>>>>>>> afterwards reading that same .txt file into a string and decrypting it. 
>>>>>>> But 
>>>>>>> when i cout that "recovered" string, it is just  random characters and 
>>>>>>> not 
>>>>>>> my original "plain" string. I think the problem starts when i attempt 
>>>>>>> to 
>>>>>>> get the "cipher" string in the .txt file, but not sure. Any help is 
>>>>>>> greatly 
>>>>>>> appreciated. Thanks in advance.

You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
To view this discussion on the web visit

Reply via email to