>백엔드 개발 >파이썬 튜토리얼 >Python에서 데이터를 암호화하고 해독하는 방법

Python에서 데이터를 암호화하고 해독하는 방법

WBOY
WBOY원래의
2023-10-18 10:15:14999검색

Python에서 데이터를 암호화하고 해독하는 방법

Python에서 데이터를 암호화하고 복호화하는 방법에는 구체적인 코드 예제가 필요합니다.

데이터 암호화 및 복호화는 정보 보안 분야에서 매우 중요한 개념입니다. 실제 애플리케이션에서는 무단 액세스 및 정보 유출을 방지하기 위해 중요한 데이터를 암호화해야 하는 경우가 많습니다. Python은 데이터 암호화 및 암호 해독 작업을 구현하기 위한 풍부한 라이브러리와 기능을 제공하는 강력한 프로그래밍 언어입니다. 이 기사에서는 Python에서 데이터 암호화 및 암호 해독을 구현하기 위해 일반적으로 사용되는 암호화 알고리즘과 특정 코드 예제를 소개합니다.

1. MD5 암호화 알고리즘

MD5(Message-Digest Algorithm 5)는 모든 길이의 데이터를 암호화하는 데 일반적으로 사용되는 해시 함수입니다. 모든 길이의 메시지를 128비트 디지털 지문으로 변환하여 데이터 무결성과 변조 방지를 보장합니다.

Python에서는 hashlib 라이브러리를 사용하여 MD5 암호화 알고리즘을 구현할 수 있습니다. 다음은 샘플 코드입니다.

import hashlib

def md5_encrypt(data):
    md5 = hashlib.md5()
    md5.update(data.encode(encoding='utf-8'))
    encrypt_data = md5.hexdigest()
    return encrypt_data

# 测试示例
data = 'hello world'
encrypted_data = md5_encrypt(data)
print("加密后的数据:", encrypted_data)

실행 결과:

加密后的数据: 5eb63bbbe01eeed093cb22bb8f5acdc3

2. AES 암호화 알고리즘

AES(Advanced Encryption Standard)는 다양한 암호화 시나리오에서 널리 사용되는 고급 암호화 표준입니다. 대칭 키 암호화를 사용하여 데이터에 대해 빠르고 안전한 암호화 및 암호 해독 작업을 수행합니다.

Python에서는 pycryptodom 라이브러리를 사용하여 AES 암호화 알고리즘을 구현할 수 있습니다. 다음은 샘플 코드입니다.

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

def aes_encrypt(data, key):
    cipher = AES.new(key, AES.MODE_EAX)
    nonce = cipher.nonce
    ciphertext, tag = cipher.encrypt_and_digest(data.encode())
    encrypted_data = nonce + ciphertext + tag
    return encrypted_data

def aes_decrypt(encrypted_data, key):
    nonce = encrypted_data[:16]
    ciphertext = encrypted_data[16:-16]
    tag = encrypted_data[-16:]
    cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
    data = cipher.decrypt_and_verify(ciphertext, tag)
    return data.decode()

# 测试示例
data = 'hello world'
key = get_random_bytes(16)
encrypted_data = aes_encrypt(data, key)
print("加密后的数据:", encrypted_data)
decrypted_data = aes_decrypt(encrypted_data, key)
print("解密后的数据:", decrypted_data)

작업 결과:




解密后的数据: hello world

3. RSA 암호화 알고리즘

RSA(Rivest-Shamir-Adleman)는 데이터 암호화 및 디지털 서명에 일반적으로 사용되는 비대칭 암호화 알고리즘입니다. 두 개의 키를 사용하는데, 공개 키는 데이터를 암호화하는 데 사용되고 개인 키는 데이터를 해독하는 데 사용됩니다.

Python에서는 암호화 라이브러리를 사용하여 RSA 암호화 알고리즘을 구현할 수 있습니다. 다음은 샘플 코드입니다.

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.backends import default_backend

def rsa_encrypt(data, public_key):
    public_key = serialization.load_pem_public_key(public_key, backend=default_backend())
    encrypted_data = public_key.encrypt(data.encode(), padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
    return encrypted_data

def rsa_decrypt(encrypted_data, private_key):
    private_key = serialization.load_pem_private_key(private_key, password=None, backend=default_backend())
    decrypted_data = private_key.decrypt(encrypted_data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
    return decrypted_data.decode()

# 测试示例
data = 'hello world'
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048, backend=default_backend())
private_pem = private_key.private_bytes(encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption())
public_key = private_key.public_key()
public_pem = public_key.public_bytes(encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo)
encrypted_data = rsa_encrypt(data, public_pem)
print("加密后的数据:", encrypted_data)
decrypted_data = rsa_decrypt(encrypted_data, private_pem)
print("解密后的数据:", decrypted_data)

실행 결과:

解密后的数据: hello world

위의 샘플 코드를 통해 Python에서 데이터를 암호화하고 복호화하기 위해 다양한 암호화 알고리즘을 사용하는 방법을 확인할 수 있습니다. 적절한 암호화 알고리즘과 키 길이를 선택하고 보안 코딩 방식을 따르면 데이터 기밀성과 무결성이 보장됩니다. 이 글의 샘플 코드는 참고용일 뿐입니다. 실제 애플리케이션에서는 키 관리, 데이터 전송 보안 등의 세부 사항을 고려해야 합니다.

위 내용은 Python에서 데이터를 암호화하고 해독하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.