Advanced Encryption Standard (tsz. Advanced Encryption Standards)
Az AES algoritmus egy iteratív blokktitkosító algoritmus, amely négy alapvető lépésből áll minden körben:
AES(plain_text, key): key_schedule = KeyExpansion(key) state = plain_text XOR key_schedule for round = 1 to N-1: SubBytes(state) ShiftRows(state) MixColumns(state) AddRoundKey(state, key_schedule) SubBytes(state) ShiftRows(state) AddRoundKey(state, key_schedule) return state
Az alábbi implementáció bemutatja az AES algoritmus alapvető működését:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
# Titkosítás
def aes_encrypt(plain_text, key):
cipher = AES.new(key, AES.MODE_CBC) # CBC mód
ct_bytes = cipher.encrypt(pad(plain_text.encode(), AES.block_size))
return cipher.iv, ct_bytes
# Visszafejtés
def aes_decrypt(iv, cipher_text, key):
cipher = AES.new(key, AES.MODE_CBC, iv)
pt = unpad(cipher.decrypt(cipher_text), AES.block_size)
return pt.decode()
# Példa használat
key = get_random_bytes(16) # 128 bites kulcs
plain_text = "Hello, AES titkosítás!"
iv, cipher_text = aes_encrypt(plain_text, key)
print("Titkosított szöveg:", cipher_text)
decrypted_text = aes_decrypt(iv, cipher_text, key)
print("Visszafejtett szöveg:", decrypted_text)
Kimenet:
Titkosított szöveg: b'...' Visszafejtett szöveg: Hello, AES titkosítás!
A következő implementáció a Crypto++ könyvtárat használja:
#include <iostream>
#include <string>
#include <cryptopp/aes.h>
#include <cryptopp/modes.h>
#include <cryptopp/filters.h>
#include <cryptopp/osrng.h>
using namespace std;
using namespace CryptoPP;
string aes_encrypt(const string& plain_text, SecByteBlock& key, SecByteBlock& iv) {
string cipher_text;
// Titkosítás
CBC_Mode<AES>::Encryption encryptor;
encryptor.SetKeyWithIV(key, key.size(), iv);
StringSource(plain_text, true,
new StreamTransformationFilter(encryptor,
new StringSink(cipher_text)));
return cipher_text;
}
string aes_decrypt(const string& cipher_text, SecByteBlock& key, SecByteBlock& iv) {
string plain_text;
// Visszafejtés
CBC_Mode<AES>::Decryption decryptor;
decryptor.SetKeyWithIV(key, key.size(), iv);
StringSource(cipher_text, true,
new StreamTransformationFilter(decryptor,
new StringSink(plain_text)));
return plain_text;
}
int main() {
AutoSeededRandomPool prng;
// Kulcs és IV létrehozása
SecByteBlock key(AES::DEFAULT_KEYLENGTH);
SecByteBlock iv(AES::BLOCKSIZE);
prng.GenerateBlock(key, key.size());
prng.GenerateBlock(iv, iv.size());
string plain_text = "Hello, AES titkosítás!";
cout << "Eredeti szöveg: " << plain_text << endl;
// Titkosítás
string cipher_text = aes_encrypt(plain_text, key, iv);
cout << "Titkosított szöveg: " << cipher_text << endl;
// Visszafejtés
string decrypted_text = aes_decrypt(cipher_text, key, iv);
cout << "Visszafejtett szöveg: " << decrypted_text << endl;
return 0;
}
Kimenet:
Eredeti szöveg: Hello, AES titkosítás! Titkosított szöveg: ... Visszafejtett szöveg: Hello, AES titkosítás!
Az AES-t széles körben használják biztonságos kommunikációhoz, adattitkosításhoz és adatvédelemhez. Számos könyvtár és eszköz biztosít gyors és könnyen használható implementációkat Pythonban és C++-ban is.