Enkripsi dan Dekripsi dalam Python: Panduan Pycrypto – Codewithaden

Pycrypto adalah Python modul yang menyediakan layanan kriptografi. Bentuk lengkap dari Pycrypto adalah Python Cryptography Toolkit. Modul Pycrypto adalah kumpulan fungsi hash yang aman seperti RIPEMD160 , Sha256, dan berbagai algoritma enkripsi seperti AES , Des , RSA , Elgamal , dll. Misalnya, AES sangat cepat dan dapat diandalkan dan merupakan standar de facto untuk enkripsi simetris.

Enkripsi AES

Itu Standar Enkripsi Lanjutan (AES) adalah cipher blok simetris.

AES Termasuk tiga cipher blok:

  1. AES-128
  2. AES-192
  3. AES-256

AES-128 menggunakan panjang kunci 128-bit untuk mengenkripsi dan mendekripsi blok pesan, AES-192 menggunakan panjang kunci 192-bit, dan AES-256 menggunakan panjang kunci 256-bit untuk mengenkripsi dan mendekripsi pesan.

Setiap cipher mengenkripsi dan mendekripsi data dalam blok 128 bit menggunakan kunci kriptografi 128, 192, dan 256 bit.

Simetris, alias kunci rahasia, cipher menggunakan kunci yang sama untuk enkripsi dan dekripsi, sehingga pengirim dan penerima harus tahu – dan menggunakan – kunci rahasia yang sama.

Semua panjang kunci dapat digunakan untuk melindungi tingkat rahasia dan rahasia. Informasi rahasia teratas membutuhkan panjang kunci 192-bit atau 256-bit.

Dalam contoh ini, kita akan melihat enkripsi dan dekripsi teks 16-byte.

Langkah -langkah untuk membuat enkripsi dan dekripsi di Python

Untuk menggunakan enkripsi dan dekripsi AES di Python, kita harus mengikuti langkah -langkah di bawah ini.

  1. Menghasilkan kunci rahasia.
  2. Menghasilkan vektor inisialisasi.
  3. Buat cipher AES.
  4. Mengenkripsi pesan dengan AES
  5. Mendekripsi pesannya

Menghasilkan Kunci Rahasia

AES enkripsi membutuhkan kunci yang kuat. Semakin kuat kuncinya, semakin kuat enkripsi Anda. Ini mungkin tautan terlemah dalam rantai. Untuk menghasilkan kunci rahasia, kami akan menggunakan Urandom Modul OS Python () metode.

Python os.urandom () Fungsi digunakan untuk menghasilkan string ukuran byte acak yang cocok untuk penggunaan kriptografi, atau kita dapat mengatakan metode ini menghasilkan string yang berisi karakter acak.

from os import urandom

secret_key = urandom(16)
print(secret_key) 

Keluaran

b'I\xff\xd5\xbb3\xae\xd7\xd8\x9c\xf1\xc3}\x8d\xd0*\x1a' 

Jadi, Secret_key kami telah dihasilkan. Anda harus menghasilkan kunci yang kuat untuk enkripsi AES.

Mari kita menuju ke langkah berikutnya.

Menghasilkan vektor inisialisasi

Tujuan utama dari vektor inisialisasi adalah untuk menghasilkan data terenkripsi yang berbeda sehingga penyerang tidak dapat menggunakan kriptanalisis untuk menyimpulkan data utama atau data pesan.

Kami akan menghasilkan vektor inisialisasi menggunakan fungsi os.urandom ().

from os import urandom

iv = urandom(16)
print(iv) 

Keluaran

b"NU\x95c'pfc\xe9\xc0X\x81\xd8\x13\x18(" 

Jadi, IV kami telah dihasilkan.

Vektor inisialisasi harus ditransmisikan ke penerima untuk dekripsi yang tepat, tetapi tidak perlu dirahasiakan. Sebaliknya, itu dikemas ke dalam file output di awal (setelah 8 byte dari ukuran file asli), sehingga penerima dapat membacanya sebelum mendekripsi data aktual.

Buat cipher AES

Kami sekarang membuat cipher AES dan menggunakannya untuk mengenkripsi string (atau satu set byte; data tidak perlu teks saja).

Cipher AES dibuat dengan mode CBC, di mana setiap blok “dirantai” ke blok sebelumnya di aliran. (Anda tidak harus mengetahui detail yang tepat kecuali tertarik. Yang perlu Anda ketahui adalah – untuk menggunakan mode CBC).

Juga, untuk enkripsi AES menggunakan pycrypto, Anda harus memastikan bahwa data adalah kelipatan panjang 16-byte. Pad buffer jika tidak dan sertakan ukuran data pada awal output sehingga penerima dapat mendekripsi secara memadai.

Lihat kode berikut.

from os import urandom
from Crypto.Cipher import AES

# For Generating AES Cipher text
secret_key = urandom(16)
iv = urandom(16)
obj = AES.new(secret_key, AES.MODE_CBC, iv) 

Dalam kode di atas, kami telah menghasilkan dua modul yang diimpor.

  1. urandom
  2. AES

Untuk menghasilkan objek cipher AES, kita harus menggunakan metode AES.new ().

Sekarang, metode aes.new () mengambil tiga parameter.

  1. kunci rahasia
  2. Aes.mode.cbc
  3. iv

Aes.mode.cbc adalah salah satu mode operasi klasik untuk cipher blok simetris.

Mode operasi klasik untuk cipher blok simetris

Konstanta modul untuk mode operasi yang didukung dengan AES:

Mode_ECB : Buku Kode Elektronik (ECB)

MODE_CBC : Cipher-Block Chaining (CBC)

Mode_cfb : Cipher Feedback (CFB)

Mode_ofb : Umpan balik keluaran (OFB)

Mode_ctr : Mode Counter (CTR)

Mode_openpgp : Mode OpenPGP

Mode_CCM : Counter dengan mode CBC-MAC (CCM)

Mode_eax : Mode eax

Mode_GCM : Galois Counter Mode (GCM)

Mode_siv : Vektor inisialisasi sintetis (IV)

MODE_OCB : Buku kode offset (OCB)

Mengenkripsi pesan dengan AES

Ini adalah langkah terakhir dari enkripsi AES.

Kami pertama -tama akan mendefinisikan pesan yang perlu dienkripsi, dan kemudian kami akan menggunakan fungsi AES.encrypt ().

from os import urandom
from Crypto.Cipher import AES

# For Generating cipher text
secret_key = urandom(16)
iv = urandom(16)
obj = AES.new(secret_key, AES.MODE_CBC, iv)

# Encrypt the message
message = 'Lorem Ipsum text'
print('Original message is: ', message)
encrypted_text = obj.encrypt(message)
print('The encrypted text', encrypted_text) 

Keluaran

Original message is:  Lorem Ipsum text
The encrypted text b'a\xc4+(\xb2\x15\x92\x93\x17\x8c\x01\x8a\xba\xe6\xff5' 

Hanya itu saja. Kami telah mengenkripsi pesan menggunakan AES di Python.

Mendekripsi pesan di Python

Dekripsi membutuhkan kunci yang dienkripsi data. Kemudian, Anda perlu mengirim kunci ke penerima menggunakan saluran yang aman.

Kami akan menggunakan metode AES Decrypt () untuk mendekripsi pesan terenkripsi dan mendapatkan kembali teks asli kami.

from os import urandom
from Crypto.Cipher import AES

# For Generating cipher text
secret_key = urandom(16)
iv = urandom(16)
obj = AES.new(secret_key, AES.MODE_CBC, iv)

# Encrypt the message
message = 'Lorem Ipsum text'
print('Original message is: ', message)
encrypted_text = obj.encrypt(message)
print('The encrypted text', encrypted_text)

# Decrypt the message
rev_obj = AES.new(secret_key, AES.MODE_CBC, iv)
decrypted_text = rev_obj.decrypt(encrypted_text)
print('The decrypted text', decrypted_text.decode('utf-8'))
 

Keluaran

Original message is:  Lorem Ipsum text
The encrypted text b'\xc8\x01\x14y\xeb\xb9\xa4#\xd5bQ\xeb\xe0\x00"\t'
The decrypted text Lorem Ipsum text 

Hanya itu saja. Kami mendapatkan teks aslinya.

Jadi, inilah cara Anda mengenkripsi dan mendekripsi string dalam Python.

Lihat juga

Python hash ()

Python uuid

Menghasilkan nomor acak dalam python

Artikel ini berasal dari website Winpoin, dan kemudian diterjemahkan ke bahasa indonesia, baca artikel asli disini

Leave a Reply

Your email address will not be published. Required fields are marked *