#include <iostream>
#include <string>
#include <sstream>
std:: string string_to_hex( const std:: string & input)
{
static const char * const lut = "0123456789ABCDEF" ;
size_t len = input.size ( ) ;
std:: string output;
output.reserve ( 2 * len) ;
for ( size_t i = 0 ; i < len; ++ i)
{
const unsigned char c = input[ i] ;
output.push_back ( lut[ c >> 4 ] ) ;
output.push_back ( lut[ c & 15 ] ) ;
}
return output;
}
std:: string encrypt( std:: string msg, std:: string key)
{
// Make sure the key is at least as long as the message
std:: string tmp( key) ;
while ( key.size ( ) < msg.size ( ) )
key + = tmp;
// And now for the encryption part
for ( std:: string :: size_type i = 0 ; i < msg.size ( ) ; ++ i)
msg[ i] ^ = key[ i] ;
return msg;
}
std:: string decrypt( std:: string msg, std:: string key)
{
return encrypt( msg, key) ; // lol
}
int main( )
{
char s1[ ] = "\x25 \x0A \x02 \x07 \x0A \x59 \x3A \x00 \x1C \x07 \x01 \x58 " ;
char s2[ ] = "\x25 \x0A \x02 \x07 \x0A \x57 \x4D \x3B \x06 \x02 \x16 \x59 \x04 \x1C \x4E \x0A \x45 \x0D \x08 \x1C \x1A \x4B \x0A \x1F \x4D \x0A \x00 \x08 \x17 \x00 \x1D \x1B \x07 \x05 \x02 \x59 \x1E \x1B \x1C \x02 \x0B \x1E \x1E \x4F \x07 \x05 \x45 \x3A \x46 \x44 \x40 " ;
std:: cout << string_to_hex( encrypt( "Hello World!" , "monkey" ) ) << std:: endl ;
std:: cout << decrypt( std:: string ( std:: begin ( s1) , std:: end ( s1) - 1 ) , "monkey" ) << std:: endl ;
std:: cout << string_to_hex( encrypt( "Hello. This is a test of encrypting strings in C++." , "monkey" ) ) << std:: endl ;
std:: cout << decrypt( std:: string ( std:: begin ( s2) , std:: end ( s2) - 1 ) , "monkey" ) << std:: endl ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KCnN0ZDo6c3RyaW5nIHN0cmluZ190b19oZXgoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KQp7CiAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbHV0ID0gIjAxMjM0NTY3ODlBQkNERUYiOwogICAgc2l6ZV90IGxlbiA9IGlucHV0LnNpemUoKTsKCiAgICBzdGQ6OnN0cmluZyBvdXRwdXQ7CiAgICBvdXRwdXQucmVzZXJ2ZSgyICogbGVuKTsKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCiAgICB7CiAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBjID0gaW5wdXRbaV07CiAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhsdXRbYyA+PiA0XSk7CiAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhsdXRbYyAmIDE1XSk7CiAgICB9CiAgICByZXR1cm4gb3V0cHV0Owp9CgpzdGQ6OnN0cmluZyBlbmNyeXB0KHN0ZDo6c3RyaW5nIG1zZywgc3RkOjpzdHJpbmcga2V5KQp7CiAgICAvLyBNYWtlIHN1cmUgdGhlIGtleSBpcyBhdCBsZWFzdCBhcyBsb25nIGFzIHRoZSBtZXNzYWdlCiAgICBzdGQ6OnN0cmluZyB0bXAoa2V5KTsKICAgIHdoaWxlIChrZXkuc2l6ZSgpIDwgbXNnLnNpemUoKSkKICAgICAgICBrZXkgKz0gdG1wOwoKICAgIC8vIEFuZCBub3cgZm9yIHRoZSBlbmNyeXB0aW9uIHBhcnQKICAgIGZvciAoc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBpID0gMDsgaSA8IG1zZy5zaXplKCk7ICsraSkKICAgICAgICBtc2dbaV0gXj0ga2V5W2ldOwogICAgcmV0dXJuIG1zZzsKfQpzdGQ6OnN0cmluZyBkZWNyeXB0KHN0ZDo6c3RyaW5nIG1zZywgc3RkOjpzdHJpbmcga2V5KQp7CiAgICByZXR1cm4gZW5jcnlwdChtc2csIGtleSk7IC8vIGxvbAp9CgppbnQgbWFpbigpCnsKCWNoYXIgczFbXSA9ICJceDI1XHgwQVx4MDJceDA3XHgwQVx4NTlceDNBXHgwMFx4MUNceDA3XHgwMVx4NTgiOwoJY2hhciBzMltdID0gIlx4MjVceDBBXHgwMlx4MDdceDBBXHg1N1x4NERceDNCXHgwNlx4MDJceDE2XHg1OVx4MDRceDFDXHg0RVx4MEFceDQ1XHgwRFx4MDhceDFDXHgxQVx4NEJceDBBXHgxRlx4NERceDBBXHgwMFx4MDhceDE3XHgwMFx4MURceDFCXHgwN1x4MDVceDAyXHg1OVx4MUVceDFCXHgxQ1x4MDJceDBCXHgxRVx4MUVceDRGXHgwN1x4MDVceDQ1XHgzQVx4NDZceDQ0XHg0MCI7CiAgICBzdGQ6OmNvdXQgPDwgc3RyaW5nX3RvX2hleChlbmNyeXB0KCJIZWxsbyBXb3JsZCEiLCAibW9ua2V5IikpIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCBkZWNyeXB0KHN0ZDo6c3RyaW5nKHN0ZDo6YmVnaW4oczEpLCBzdGQ6OmVuZChzMSktMSksICJtb25rZXkiKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgc3RyaW5nX3RvX2hleChlbmNyeXB0KCJIZWxsby4gVGhpcyBpcyBhIHRlc3Qgb2YgZW5jcnlwdGluZyBzdHJpbmdzIGluIEMrKy4iLCAibW9ua2V5IikpIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCBkZWNyeXB0KHN0ZDo6c3RyaW5nKHN0ZDo6YmVnaW4oczIpLCBzdGQ6OmVuZChzMiktMSksICJtb25rZXkiKSA8PCBzdGQ6OmVuZGw7Cgp9Cg==