متقارن بودن یعنی چی؟هم برای رمزنگاری و هم برای رمزگشایی از یه کلید ثابت استفاده میکنی.
AES چند بیتیه؟۱۲۸، ۱۹۲، یا ۲۵۶ بیتی. بسته به اینکه چقدر میخوای مقاوم باشه.
الگوریتم بلوکیه؟بله، روی بلاکهای ۱۶ بایتی کار میکنه. اگه متن بلندتر باشه باید با padding پرش کنیم.
حالتهای اجرایی (mode):
ECB (ناامن)
CBC (خیلی رایجه)
CFB / OFB / CTR (برای نیازهای خاص)
pip install pycryptodome
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
import base64
# کلید باید 16، 24 یا 32 بایت باشه (برای AES-128، AES-192، AES-256)
key = get_random_bytes(32) # AES-256
# دیتا رو آماده کن
data = b"this is top secret"
block_size = 16
# IV (وکتور اولیه) باید 16 بایت باشه
iv = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_CBC, iv)
# رمزنگاری
encrypted = cipher.encrypt(pad(data, block_size))
# ترکیب IV با دیتا برای ارسال یا ذخیره
encrypted_data = base64.b64encode(iv + encrypted)
print("Encrypted:", encrypted_data.decode())
🧯 حالا رمزگشایی:
# اول رمز رو decode کن و IV و ciphertext رو جدا کن
decoded = base64.b64decode(encrypted_data)
iv = decoded[:16]
ciphertext = decoded[16:]
# ساخت مجدد رمز
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = unpad(cipher.decrypt(ciphertext), block_size)
print("Decrypted:", decrypted.decode())
1. هیچوقت از ECB استفاده نکن. چون الگوها رو نشون میده.
2. کلید رو تو کدت نذار. از محیط یا vault بخونش.
3. IV باید منحصر بهفرد باشه، ولی نیازی به مخفی بودنش نیست.
4. برای فایلهای بزرگ، از AES-CTR یا حالتهای استریم استفاده کن.
۱۶:۲۵