Compare commits

..

No commits in common. "acf3aeebab582d2847d132d6dcabb1fbd91d23b0" and "fd9fee572ef3993045534bd5fef65ecd40332ebc" have entirely different histories.

View File

@ -3,35 +3,33 @@
#include <vector> #include <vector>
#include <string> #include <string>
using namespace std;
int main() { int main() {
try { try {
cout << "=== Asymmetric Cryptography Example ===" << endl; std::cout << "=== Asymmetric Cryptography Example ===" << std::endl;
string generate_new_keys; std::string generate_new_keys;
cout << "Generate new keys? (y/n): "; std::cout << "Generate new keys? (y/n): ";
cin >> generate_new_keys; std::cin >> generate_new_keys;
string message; std::string message;
vector<uint8_t> encrypted; std::vector<uint8_t> encrypted;
if (generate_new_keys == "y") { if (generate_new_keys == "y") {
// 1. Generate keys // 1. Generate keys
cout << "1. Generating key pair...\n\n"; std::cout << "1. Generating key pair...\n\n";
auto keys = CryptoLib::generate_keys(2048); auto keys = CryptoLib::generate_keys(2048);
auto& private_key = keys.first; auto& private_key = keys.first;
auto& public_key = keys.second; auto& public_key = keys.second;
// 2. Save keys to files // 2. Save keys to files
cout << "2. Saving keys to files...\n\n"; std::cout << "2. Saving keys to files...\n\n";
CryptoLib::save_private_key(*private_key, "private_key.pem"); CryptoLib::save_private_key(*private_key, "private_key.pem");
CryptoLib::save_public_key(*public_key, "public_key.pem"); CryptoLib::save_public_key(*public_key, "public_key.pem");
message = "Hello, this is a secret message!"; message = "Hello, this is a secret message!";
} else { } else {
cout << "Enter message to decrypt (if exists): "; std::cout << "Enter message to decrypt (if exists): ";
cin.ignore(); std::cin.ignore();
getline(cin, message); std::getline(std::cin, message);
if (!message.empty()) { if (!message.empty()) {
encrypted = CryptoLib::base64_to_bytes(message); encrypted = CryptoLib::base64_to_bytes(message);
@ -41,35 +39,35 @@ int main() {
} }
// 3. Load keys from files // 3. Load keys from files
cout << "3. Loading keys from files...\n\n"; std::cout << "3. Loading keys from files...\n\n";
auto loaded_private_key = CryptoLib::load_private_key("private_key.pem"); auto loaded_private_key = CryptoLib::load_private_key("private_key.pem");
auto loaded_public_key = CryptoLib::load_public_key("public_key.pem"); auto loaded_public_key = CryptoLib::load_public_key("public_key.pem");
// 4. Convert public key to string and back // 4. Convert public key to string and back
cout << "4. Loaded keys:\n"; std::cout << "4. Loaded keys:\n";
string private_key_str = CryptoLib::private_key_to_string(*loaded_private_key); std::string private_key_str = CryptoLib::private_key_to_string(*loaded_private_key);
string public_key_str = CryptoLib::public_key_to_string(*loaded_public_key); std::string public_key_str = CryptoLib::public_key_to_string(*loaded_public_key);
cout << "Private key string as: " << private_key_str.substr(0, 50) << "...\n"; std::cout << "Private key string as: " << private_key_str.substr(0, 50) << "...\n";
cout << "Public key string as: " << public_key_str.substr(0, 50) << "...\n\n"; std::cout << "Public key string as: " << public_key_str.substr(0, 50) << "...\n\n";
cout << "5. Convert public key from string...\n\n"; std::cout << "5. Convert public key from string...\n\n";
auto restored_public_key = CryptoLib::public_key_from_string(public_key_str); auto restored_public_key = CryptoLib::public_key_from_string(public_key_str);
if (encrypted.empty()) { if (encrypted.empty()) {
// 6. Encrypt data // 6. Encrypt data
cout << "6. Testing ecnryption..." << endl; std::cout << "6. Testing ecnryption..." << std::endl;
cout << "Original message: " << message << endl; std::cout << "Original message: " << message << std::endl;
encrypted = CryptoLib::encrypt(*loaded_public_key, message); encrypted = CryptoLib::encrypt(*loaded_public_key, message);
cout << "Encrypted (base64): " << CryptoLib::bytes_to_base64(encrypted) << endl; std::cout << "Encrypted (base64): " << CryptoLib::bytes_to_base64(encrypted) << std::endl;
cout << "Encrypted data size: " << encrypted.size() << " bytes\n\n"; std::cout << "Encrypted data size: " << encrypted.size() << " bytes\n\n";
} }
// 7. Decrypt data // 7. Decrypt data
string decrypted_message = CryptoLib::decrypt(*loaded_private_key, encrypted); std::string decrypted_message = CryptoLib::decrypt(*loaded_private_key, encrypted);
cout << "7. Decrypted message: " << decrypted_message << "\n"; std::cout << "7. Decrypted message: " << decrypted_message << "\n";
} catch (const exception& e) { } catch (const std::exception& e) {
cerr << "Error: " << e.what() << endl; std::cerr << "Error: " << e.what() << std::endl;
return 1; return 1;
} }