Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyulitkan dan Menyahsulit Rentetan dengan Selamat Menggunakan Kata Laluan dalam Python?

Bagaimana untuk Menyulitkan dan Menyahsulit Rentetan dengan Selamat Menggunakan Kata Laluan dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-10-22 21:03:02169semak imbas

How to Safely Encrypt and Decrypt Strings Using Passwords in Python?

Menyulitkan dan Menyahsulit Rentetan dengan Kata Laluan dalam Python

Perpustakaan kriptografi Python ialah kit alat komprehensif untuk menyulitkan dan menyahsulit data. Untuk menyulitkan rentetan menggunakan kata laluan, anda boleh memanfaatkan kelas Fernet, yang menyediakan penyulitan yang teguh dan termasuk ciri penting seperti cap waktu, tandatangan HMAC dan pengekodan base64.

Fernet dengan Kata Laluan

<code class="python">from cryptography.fernet import Fernet, FernetException

password = 'mypass'  
fernet = Fernet(password.encode())

encrypted_message = fernet.encrypt(b'John Doe')
decrypted_message = fernet.decrypt(encrypted_message)

print(encrypted_message)  # Encrypted string
print(decrypted_message.decode())  # 'John Doe'</code>

Fernet memastikan data yang disulitkan selamat dengan menggunakan berbilang lapisan penyulitan dan memastikan integriti mesej dengan tandatangan HMAC.

Penjanaan Kunci Diperolehi Kata Laluan untuk Fernet

Sambil menggunakan kata laluan terus dengan Fernet adalah mudah , lebih selamat untuk menjana kunci menggunakan kata laluan. Pendekatan ini melibatkan mendapatkan kunci rahsia daripada kata laluan dan garam menggunakan fungsi terbitan kunci.

<code class="python">import secrets

from cryptography.fernet import Fernet
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

backend = default_backend()
salt = secrets.token_bytes(16)  # Generate a unique salt
password = 'mypass'.encode()  # Convert password to bytes

kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(), length=32, salt=salt, iterations=100000,
    backend=backend
)
key = b64e(kdf.derive(password))  # Derive the secret key

fernet = Fernet(key)
encrypted_message = fernet.encrypt(b'John Doe')</code>

Kaedah ini meningkatkan keselamatan dengan menambahkan lapisan perlindungan tambahan pada proses penyulitan dengan kunci kukuh yang diperoleh daripada kata laluan anda dan garam yang unik.

Pendekatan Penyulitan Lain

Di luar Fernet, anda boleh mempertimbangkan alternatif bergantung pada keperluan khusus anda:

Base64 Mengaburkan: Untuk asas kekeliruan, pengekodan base64 boleh digunakan tanpa penyulitan. Walau bagaimanapun, ini tidak memberikan sebarang keselamatan sebenar, hanya kekaburan.

Tandatangan HMAC: Jika matlamat anda ialah integriti data, gunakan tandatangan HMAC untuk memastikan data tidak diganggu.

Penyulitan AES-GCM: AES-GCM menggunakan penyulitan blok Galois/Counter Mode untuk menyediakan kedua-dua penyulitan dan jaminan integriti, sama seperti Fernet tetapi tanpa ciri mesra penggunanya.

Atas ialah kandungan terperinci Bagaimana untuk Menyulitkan dan Menyahsulit Rentetan dengan Selamat Menggunakan Kata Laluan dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn