#include <string>
#include <iostream>
void cbc_encrypt(char iv, char key, const char* text, std::size_t size, char* buf)
{
while (size--)
{
*buf = iv ^ (key ^ *text++);
iv = *buf++;
}
}
void cbc_decrypt(char iv, char key, const char* text, std::size_t size, char* buf)
{
while (size--)
{
*buf++ = iv ^ (key ^ *text);
iv = *text++;
}
}
int main()
{
std::string msg;
while (std::getline(std::cin, msg))
{
std::string enc(msg.size(), char());
cbc_encrypt('a', 'k', msg.data(), msg.size(), &enc[0]);
cbc_decrypt('a', 'k', enc.data(), enc.size(), &msg[0]);
std::cout << "Encrypted: " << enc << '\n';
std::cout << "Decrypted: " << msg << '\n';
}
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBjYmNfZW5jcnlwdChjaGFyIGl2LCBjaGFyIGtleSwgY29uc3QgY2hhciogdGV4dCwgc3RkOjpzaXplX3Qgc2l6ZSwgY2hhciogYnVmKQp7Cgl3aGlsZSAoc2l6ZS0tKQoJewoJCSpidWYgPSBpdiBeIChrZXkgXiAqdGV4dCsrKTsKCQlpdiA9ICpidWYrKzsKCX0KfQoKdm9pZCBjYmNfZGVjcnlwdChjaGFyIGl2LCBjaGFyIGtleSwgY29uc3QgY2hhciogdGV4dCwgc3RkOjpzaXplX3Qgc2l6ZSwgY2hhciogYnVmKQp7Cgl3aGlsZSAoc2l6ZS0tKQoJewoJCSpidWYrKyA9IGl2IF4gKGtleSBeICp0ZXh0KTsKCQlpdiA9ICp0ZXh0Kys7Cgl9Cn0KCmludCBtYWluKCkKewoJc3RkOjpzdHJpbmcgbXNnOwoKCXdoaWxlIChzdGQ6OmdldGxpbmUoc3RkOjpjaW4sIG1zZykpCgl7CgkJc3RkOjpzdHJpbmcgZW5jKG1zZy5zaXplKCksIGNoYXIoKSk7CgkJY2JjX2VuY3J5cHQoJ2EnLCAnaycsIG1zZy5kYXRhKCksIG1zZy5zaXplKCksICZlbmNbMF0pOwoJCWNiY19kZWNyeXB0KCdhJywgJ2snLCBlbmMuZGF0YSgpLCBlbmMuc2l6ZSgpLCAmbXNnWzBdKTsKCgkJc3RkOjpjb3V0IDw8ICJFbmNyeXB0ZWQ6ICIgPDwgZW5jIDw8ICdcbic7CgkJc3RkOjpjb3V0IDw8ICJEZWNyeXB0ZWQ6ICIgPDwgbXNnIDw8ICdcbic7Cgl9Cn0=