diff options
| author | alpine <[email protected]> | 2020-06-13 22:27:52 +0200 |
|---|---|---|
| committer | alpine <[email protected]> | 2020-06-13 22:27:52 +0200 |
| commit | bad7b4f2d19f95b278fdcb3056be01cae9af1dbb (patch) | |
| tree | 5bef91f910a2c03d74df9693a077ee33b2fe7886 /server/src/util | |
| parent | Initial commit (diff) | |
| download | loader-bad7b4f2d19f95b278fdcb3056be01cae9af1dbb.tar.xz loader-bad7b4f2d19f95b278fdcb3056be01cae9af1dbb.zip | |
Client.
Message encryption.
Packet handler.
Disconnect event handler.
Diffstat (limited to 'server/src/util')
| -rw-r--r-- | server/src/util/xor.cpp | 39 | ||||
| -rw-r--r-- | server/src/util/xor.h | 12 |
2 files changed, 51 insertions, 0 deletions
diff --git a/server/src/util/xor.cpp b/server/src/util/xor.cpp new file mode 100644 index 0000000..a00ecc9 --- /dev/null +++ b/server/src/util/xor.cpp @@ -0,0 +1,39 @@ +#include "../include.h" +#include "xor.h" + +char enc::gen_key() { + std::random_device r; + + std::default_random_engine e1(r()); + std::uniform_real_distribution<> uniform_dist(0, 255); + return static_cast<char>(uniform_dist(e1)); +} + +void enc::encrypt_message(std::string &str) { + std::array<char, key_len> keys; + for (size_t i = 0; i < key_len; i++) { + keys[i] = gen_key(); + str.insert(str.end(), keys[i]); + } + + for (auto &key : keys) { + for (size_t i = 0; i < str.size() - key_len; i++) { + str[i] ^= key; + } + } +} + +void enc::decrypt_message(std::string &str) { + if (str.size() <= key_len) return; + + std::string keys = str.substr(0, key_len); + std::reverse(keys.begin(), keys.end()); + + for (auto &key : keys) { + for (size_t i = key_len; i < str.size(); i++) { + str[i] ^= key; + } + } + + str.erase(str.begin(), str.begin() + key_len); +}
\ No newline at end of file diff --git a/server/src/util/xor.h b/server/src/util/xor.h new file mode 100644 index 0000000..7180945 --- /dev/null +++ b/server/src/util/xor.h @@ -0,0 +1,12 @@ +#pragma once + +namespace enc { +constexpr size_t key_len = 50; + +char gen_key(); + +void encrypt_message(std::string &str); + +void decrypt_message(std::string &str); + +} // namespace enc
\ No newline at end of file |