این رمزنگاری ها برای رمزنگاری از یک کلید و برای رمزگشایی از یک کلید دیگر استفاده میکنند که به کلید که برای رمزنگاری استفاده میشه رو public و کلید که برای رمزگشایی استفاده میشه رو privet مینامند.
رمزنگاری های که عمل رمزگشایی و رمزنگاری رو با یک کلید انجام میدن را رمزنگاری متقارن میگویند. رمزنگاری متقارن خودش به چند بخش دیگه تبدیل میشه مثل stream, block و..... رمزنگاری های salsa20, chacha, aes, des, des3 مثااب از رمزنگاری متقارن هستند.
کتابخانه cryptography یک Module نه چندان دندون گیر برای پایتون است که با استفاده از این کتابخانه میتوان برای رمزنگاری دیتا استفاده کنیم.
برای نصب این ماژول از دستور زیر استفاده میکنیم:
اگر در نصب به مشکلی برخوردید(احتمالا بخاطر ورژن پایتون) از pycryptodome میتونیم استفاده کنیم
ما میتوینم برای رمزنگاری دیتا کلید رندم تولید کنیم که کتابخانه os برای ما این کارو راحت کرده:
تابع urandom برای ما یک رشته بایت رندم با طول مشخص تولید میکنه:
رمزنگاری aes(Advance Encryption Standard) یک رمزنگاری متقارن است ما میخوایم یک دیتا رو با این الگوریتم رمزنگاری کنیم اول باید از cryptography.hazmat.primitives.ciphers چیزای که لازم داریم که میشه Cipher, algorithms, modes رو ایمپورت میکنیم ما میخایم با aes-256 mode cbc دیتا مونو رمزنگاری کنیم و نیاز به یه کلید 32 بایت و iv با طول 16 بایت لازم داریم:
حالا باید یه شی از کلس Cipher بسازیم:
ورودی اول نشون میده که ما میخوایم از الگوریتم AES با طول کلید 256 بیت استفاده کنیم و کلید رو بهش میدم در ورودی بعد هم میگیم میخوایم از مود CBC استفاده کنیم و IV بهش میدیم در مرحله بعد از یک شی از کلاس encryptor میسازیم:
حالا ما میتونیم رمزنگاری دیتا مون رو انجام بدیم:
خروجی میشه این:
ما متن "a secret message" رمزنگاری کردیم حالا برای رمزگشایی از کد زیر استفاده میکنیم:
در بالا دیتا رمزنگاری شده رو در ct ریختیم و key & iv که رندم ساخته بودیمو بهش دادیم:
مثل رمزنگاری یه شی از کلاس cipher ساختیم و یک شی هم از کلاس decryptor ساختیم و دیتا مون رو رمزگشایی کردیم: