#include "encryption_functions.h" #include "hex_functions.h" #include #include #include #include #include QString fanta_encrypt(QString temp_input, unsigned int p_key) { //using standard stdlib types is actually easier here because of implicit char<->int conversion //which in turn makes encryption arithmetic easier unsigned int key = p_key; unsigned int C1 = 53761; unsigned int C2 = 32618; QVector temp_result; std::string input = temp_input.toUtf8().constData(); for (unsigned int pos = 0 ; pos < input.size() ; ++pos) { uint_fast8_t output = input.at(pos) ^ (key >> 8) % 256; temp_result.append(output); key = (temp_result.at(pos) + key) * C1 + C2; } std::string result = ""; for (uint_fast8_t i_int : temp_result) { result += omni::int_to_hex(i_int); } QString final_result = QString::fromStdString(result); return final_result; } QString fanta_decrypt(QString temp_input, unsigned int key) { std::string input = temp_input.toUtf8().constData(); QVector unhexed_vector; for(unsigned int i=0; i< input.length(); i+=2) { std::string byte = input.substr(i,2); unsigned int hex_int = strtoul(byte.c_str(), nullptr, 16); unhexed_vector.append(hex_int); } unsigned int C1 = 53761; unsigned int C2 = 32618; std::string result = ""; for (int pos = 0 ; pos < unhexed_vector.size() ; ++pos) { unsigned char output = unhexed_vector.at(pos) ^ (key >> 8) % 256; result += output; key = (unhexed_vector.at(pos) + key) * C1 + C2; } return QString::fromStdString(result); }