Hướng dẫn how do you encrypt aes 256 in python? - làm thế nào để bạn mã hóa aes 256 trong python?

Chương trình Python sau đây cho thấy cách thực hiện mã hóa và giải mã AES 256 bằng thư viện Pycrypto. Xin lưu ý rằng ví dụ này được viết trong Python 3.pycrypto library. Please note that this example is written in Python 3.

Đầu tiên đảm bảo rằng thư viện pycrypto được cài đặt trên hệ thống của bạn bằng cách chạy lệnh sau,pycrypto library is installed on your system by running the following command,

PIP3 Cài đặt pycrypto

Trong chương trình Python 3 sau đây, chúng tôi sử dụng các lớp pycrypto cho mã hóa và giải mã AES 256. Chương trình yêu cầu người dùng nhận mật khẩu [cụm mật khẩu] để mã hóa dữ liệu. Cụm mật khẩu này được chuyển đổi thành giá trị băm trước khi sử dụng nó làm khóa để mã hóa. Chương trình sau đây mã hóa một văn bản mẫu và sau đó in cả tin nhắn được mã hóa và thông báo được giải mã trên bảng điều khiển.

# AES 256 encryption/decryption using pycrypto library

import base64
import hashlib
from Crypto.Cipher import AES
from Crypto import Random

BLOCK_SIZE = 16
pad = lambda s: s + [BLOCK_SIZE - len[s] % BLOCK_SIZE] * chr[BLOCK_SIZE - len[s] % BLOCK_SIZE]
unpad = lambda s: s[:-ord[s[len[s] - 1:]]]

password = input["Enter encryption password: "]


def encrypt[raw, password]:
    private_key = hashlib.sha256[password.encode["utf-8"]].digest[]
    raw = pad[raw]
    iv = Random.new[].read[AES.block_size]
    cipher = AES.new[private_key, AES.MODE_CBC, iv]
    return base64.b64encode[iv + cipher.encrypt[raw]]


def decrypt[enc, password]:
    private_key = hashlib.sha256[password.encode["utf-8"]].digest[]
    enc = base64.b64decode[enc]
    iv = enc[:16]
    cipher = AES.new[private_key, AES.MODE_CBC, iv]
    return unpad[cipher.decrypt[enc[16:]]]


# First let us encrypt secret message
encrypted = encrypt["This is a secret message", password]
print[encrypted]

# Let us decrypt using our original password
decrypted = decrypt[encrypted, password]
print[bytes.decode[decrypted]]

Đây là chương trình trên đang hoạt động,

python3 aes_encryption.py Nhập mật khẩu mã hóa: Mật khẩu của tôi b'syjPPPPPPFSVDSVHTRQRNNYD669SIUFTPZIX8JRDFDF1M9PF8KWBJDUNC9US7LP 'Đây là một tin nhắn bí mật
Enter encryption password: my password
b'sYjpPpTpPFSvdsvhTRQrNnyD669siUFtpziX8JrdFDF1zM9PF8kWbjDUnC9uS7lp'
This is a secret message

Lưu ý rằng chương trình trên sử dụng thuật toán SHA256 để tạo khóa từ cụm mật khẩu. Nếu bạn muốn mức độ bảo mật cao, điều này nên được thay thế bằng chức năng dẫn xuất khóa dựa trên mật khẩu PBKDF2. Ví dụ sau sử dụng PBKDF2 để tạo khóa,

# AES 256 encryption/decryption using pycrypto library

import base64
from Crypto.Cipher import AES
from Crypto import Random
from Crypto.Protocol.KDF import PBKDF2

BLOCK_SIZE = 16
pad = lambda s: s + [BLOCK_SIZE - len[s] % BLOCK_SIZE] * chr[BLOCK_SIZE - len[s] % BLOCK_SIZE]
unpad = lambda s: s[:-ord[s[len[s] - 1:]]]

password = input["Enter encryption password: "]


def get_private_key[password]:
    salt = b"this is a salt"
    kdf = PBKDF2[password, salt, 64, 1000]
    key = kdf[:32]
    return key


def encrypt[raw, password]:
    private_key = get_private_key[password]
    raw = pad[raw]
    iv = Random.new[].read[AES.block_size]
    cipher = AES.new[private_key, AES.MODE_CBC, iv]
    return base64.b64encode[iv + cipher.encrypt[raw]]


def decrypt[enc, password]:
    private_key = get_private_key[password]
    enc = base64.b64decode[enc]
    iv = enc[:16]
    cipher = AES.new[private_key, AES.MODE_CBC, iv]
    return unpad[cipher.decrypt[enc[16:]]]


# First let us encrypt secret message
encrypted = encrypt["This is a secret message", password]
print[encrypted]

# Let us decrypt using our original password
decrypted = decrypt[encrypted, password]
print[bytes.decode[decrypted]]

Bạn muốn mã hóa văn bản bằng mật khẩu hoặc khóa riêng trong Python? AES-256 là một mật mã đối xứng rắn thường được sử dụng để mã hóa dữ liệu cho chính mình. Nói cách khác, cùng một người mã hóa dữ liệu cũng giải mã nó, cách các nhà quản lý mật khẩu cá nhân làm việc.

Phụ thuộc 🔗 🔗

Đối với hướng dẫn này, chúng tôi sẽ sử dụng Python 3, vì vậy hãy đảm bảo bạn cài đặt PyCryptodome, điều này sẽ cho phép chúng tôi truy cập vào việc triển khai AES-256:

pip3 install pycryptodomex

Đệm - Được xử lý bởi GCM 🔗 🔗

AES-256 thường yêu cầu dữ liệu được mã hóa được phân phối trong các khối 16 byte và bạn có thể đã thấy điều này trên các trang web hoặc hướng dẫn khác. Tuy nhiên, AES-256 ở chế độ GCM không yêu cầu bất kỳ phần đệm đặc biệt nào mà chúng tôi phải làm thủ công.

Mã hóa 🔗 🔗

Bây giờ chúng tôi tạo hàm mã hóa đơn giản [plain_text, mật khẩu]. Hàm này sử dụng mật khẩu để mã hóa văn bản đơn giản. Do đó, bất kỳ ai có quyền truy cập vào văn bản được mã hóa và mật khẩu sẽ có thể giải mã nó.

def encrypt[plain_text, password]:
    # generate a random salt
    salt = get_random_bytes[AES.block_size]

    # use the Scrypt KDF to get a private key from the password
    private_key = hashlib.scrypt[
        password.encode[], salt=salt, n=2**14, r=8, p=1, dklen=32]

    # create cipher config
    cipher_config = AES.new[private_key, AES.MODE_GCM]

    # return a dictionary with the encrypted text
    cipher_text, tag = cipher_config.encrypt_and_digest[bytes[plain_text, 'utf-8']]
    return {
        'cipher_text': b64encode[cipher_text].decode['utf-8'],
        'salt': b64encode[salt].decode['utf-8'],
        'nonce': b64encode[cipher_config.nonce].decode['utf-8'],
        'tag': b64encode[tag].decode['utf-8']
    }

Nhận một công việc back-end mà không cần chi 10 nghìn đô la cho một bootcamp

  • Tìm hiểu Python, JavaScript và GO
  • Xây dựng các dự án chuyên nghiệp mà bạn cần để tìm được công việc đầu tiên của mình
  • Dành khoảng 6 tháng [khi hoàn thành bán thời gian]
  • Giá thấp tới $ 24/tháng*
  • Không mạo hiểm. Hủy bất cứ lúc nào.

Ghi chú về hàm mã hóa [] 🔗

  1. Nonce: Một không ngẫu nhiên [giá trị tùy ý] phải là một giá trị ngẫu nhiên và duy nhất cho mỗi lần hàm mã hóa của chúng tôi được sử dụng với cùng một khóa. Hãy nghĩ về nó như một muối ngẫu nhiên cho một mật mã. Thư viện cung cấp cho chúng tôi một người không an toàn.
  2. Scrypt: Scrypt được sử dụng để tạo khóa riêng an toàn từ mật khẩu. Điều này sẽ làm cho một kẻ tấn công khó khăn hơn trong việc sử dụng mã hóa của chúng tôi.
  3. Muối: Một loại muối ngẫu nhiên mới được sử dụng cho mỗi lần chạy mã hóa của chúng tôi. Điều này làm cho một kẻ tấn công không thể sử dụng các băm được tính toán trước trong một nỗ lực để bẻ khóa mật mã. [Xem bàn cầu vồng]
  4. Các tham số Scrypt:
    1. N là yếu tố chi phí. Nó phải là một sức mạnh của hai, và nó càng an toàn hơn, nhưng càng nhiều tài nguyên cần phải chạy.
    2. R là kích thước khối.
    3. P là yếu tố song song, hữu ích cho việc chạy trên nhiều lõi.
  5. Base64: Chúng tôi mã hóa tất cả dữ liệu kiểu byte của chúng tôi thành Base64 Một biểu diễn chuỗi thuận tiện
  6. TAG [MAC]: Thẻ được sử dụng để xác thực dữ liệu khi sử dụng AES ở chế độ GCM. Điều này đảm bảo không ai có thể thay đổi dữ liệu của chúng tôi mà không biết về nó khi chúng tôi giải mã.

Một con đường đơn giản đến sự nghiệp của bạn trong phát triển back-end

Tốc độ của các khóa học JavaScript, Python và Go của Boot.Dev đã hoàn hảo cho tôi. Cộng đồng đa dạng trong Discord là một vụ nổ, và các thành viên khác nhanh chóng giúp đỡ với các câu trả lời và giải thích chi tiết.

- Daniel Gerep từ Cassia, Brasil

Giải mã 🔗 🔗

def decrypt[enc_dict, password]:
    # decode the dictionary entries from base64
    salt = b64decode[enc_dict['salt']]
    cipher_text = b64decode[enc_dict['cipher_text']]
    nonce = b64decode[enc_dict['nonce']]
    tag = b64decode[enc_dict['tag']]
    

    # generate the private key from the password and salt
    private_key = hashlib.scrypt[
        password.encode[], salt=salt, n=2**14, r=8, p=1, dklen=32]

    # create the cipher config
    cipher = AES.new[private_key, AES.MODE_GCM, nonce=nonce]

    # decrypt the cipher text
    decrypted = cipher.decrypt_and_verify[cipher_text, tag]

    return decrypted

Ghi chú về chức năng giải mã [] 🔗

  1. Hàm giải mã [] cần cùng một loại muối, không phải và thẻ mà chúng tôi đã sử dụng để mã hóa. Chúng tôi đã sử dụng một từ điển để thuận tiện trong phân tích cú pháp, nhưng thay vào đó chúng tôi muốn một chuỗi bản mã hóa, chúng tôi có thể đã sử dụng một sơ đồ như salt.nonce.tag.cipher_text
  2. Các tham số cấu hình trên các hàm scrypt và AES cần giống như hàm mã hóa.

Cho tôi mã đầy đủ! 🔗 🔗

Bạn có thể muốn thấy tất cả hoạt động trong một kịch bản ví dụ. Không tìm đâu xa!

# AES 256 encryption/decryption using pycryptodome library

from base64 import b64encode, b64decode
import hashlib
from Cryptodome.Cipher import AES
import os
from Cryptodome.Random import get_random_bytes

def encrypt[plain_text, password]:
    # generate a random salt
    salt = get_random_bytes[AES.block_size]

    # use the Scrypt KDF to get a private key from the password
    private_key = hashlib.scrypt[
        password.encode[], salt=salt, n=2**14, r=8, p=1, dklen=32]

    # create cipher config
    cipher_config = AES.new[private_key, AES.MODE_GCM]

    # return a dictionary with the encrypted text
    cipher_text, tag = cipher_config.encrypt_and_digest[bytes[plain_text, 'utf-8']]
    return {
        'cipher_text': b64encode[cipher_text].decode['utf-8'],
        'salt': b64encode[salt].decode['utf-8'],
        'nonce': b64encode[cipher_config.nonce].decode['utf-8'],
        'tag': b64encode[tag].decode['utf-8']
    }


def decrypt[enc_dict, password]:
    # decode the dictionary entries from base64
    salt = b64decode[enc_dict['salt']]
    cipher_text = b64decode[enc_dict['cipher_text']]
    nonce = b64decode[enc_dict['nonce']]
    tag = b64decode[enc_dict['tag']]
    

    # generate the private key from the password and salt
    private_key = hashlib.scrypt[
        password.encode[], salt=salt, n=2**14, r=8, p=1, dklen=32]

    # create the cipher config
    cipher = AES.new[private_key, AES.MODE_GCM, nonce=nonce]

    # decrypt the cipher text
    decrypted = cipher.decrypt_and_verify[cipher_text, tag]

    return decrypted


def main[]:
    password = input["Password: "]

    # First let us encrypt secret message
    encrypted = encrypt["The secretest message here", password]
    print[encrypted]

    # Let us decrypt using our original password
    decrypted = decrypt[encrypted, password]
    print[bytes.decode[decrypted]]

main[]

Làm thế nào để bạn mã hóa AES trong Python?

Sử dụng AES để mã hóa và giải mã trong Python Pycrypto..
Tạo khóa ..
Vector khởi tạo ..
Mã hóa bằng AES ..
Giải mã với AES ..
Mã hóa tệp với AES. 6.1. Viết kích thước của tệp. 6.2. Lưu vectơ khởi tạo. 6.3. Điều chỉnh khối cuối cùng ..
Giải mã tệp bằng cách sử dụng AES ..

Làm cách nào để tạo AES

Trên dòng lệnh, gõ:..
Đối với khóa 128 bit: OpenSSL ENC -AES -128 -CBC -K SECLE -P -MD SHA1 ..
Đối với khóa 192 bit: OpenSSL ENC -AES -192 -CBC -K SECLE -P -MD SHA1 ..
Đối với khóa 256 bit: OpenSSL ENC -AES -256 -CBC -K Secret -p -md sha1.Bí mật là một cụm từ để tạo khóa.Đầu ra từ lệnh tương tự như:.

Làm cách nào để mã hóa tệp AES?

Để mã hóa một tài liệu có mật mã AES, bạn sẽ cần đảm bảo phần mềm AES Crypt được cài đặt trên máy tính của bạn ...
Xác định vị trí tệp cần được mã hóa ..
Nhấp chuột phải vào tệp và chọn tùy chọn mã hóa AES ..
AES Crypt sau đó sẽ nhắc nhận mật khẩu.....
Nhấp vào OK để hoàn thành quá trình mã hóa tệp ..

Làm thế nào để bạn viết mã hóa trong Python?

Làm cách nào để tạo mã mã hóa trong Python ?..
Nhập thư viện RSA ..
Tạo khóa công khai và riêng tư với RSA ..
Mã hóa chuỗi thành chuỗi byte ..
Sau đó mã hóa chuỗi byte bằng khóa công khai ..
Sau đó chuỗi được mã hóa có thể được giải mã bằng khóa riêng ..

Bài Viết Liên Quan

Chủ Đề