Python에서 비밀번호를 사용하여 문자열을 안전하게 암호화하고 해독하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-22 21:03:02
원래의
227명이 탐색했습니다.

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

Python에서 비밀번호를 사용하여 문자열을 안전하게 암호화 및 복호화

Python의 암호화 라이브러리는 데이터 암호화 및 복호화를 위한 포괄적인 툴킷입니다. 비밀번호를 사용하여 문자열을 암호화하려면 강력한 암호화를 제공하고 타임스탬프, HMAC 서명, base64 인코딩과 같은 필수 기능을 포함하는 Fernet 클래스를 활용할 수 있습니다.

Fernet with Password

<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은 다중 암호화를 적용하고 HMAC 서명으로 메시지 무결성을 보장하여 암호화된 데이터를 안전하게 유지합니다.

Fernet을 위한 비밀번호 파생 키 생성

Fernet에서 직접 비밀번호를 사용하는 것이 편리합니다. , 비밀번호를 사용하여 키를 생성하는 것이 더 안전합니다. 이 접근 방식에는 키 파생 기능을 사용하여 비밀번호와 솔트에서 비밀 키를 파생시키는 것이 포함됩니다.

<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>
로그인 후 복사

이 방법은 비밀번호에서 파생된 강력한 키를 사용하여 암호화 프로세스에 추가 보호 계층을 추가하여 보안을 강화합니다. 및 고유한 솔트.

기타 암호화 접근 방식

Fernet 외에도 특정 요구 사항에 따라 대안을 고려할 수 있습니다.

Base64 Obscuring: 기본 난독화, 암호화 없이 base64 인코딩을 사용할 수 있습니다. 그러나 이는 실제 보안을 제공하지 않고 단지 모호함을 제공합니다.

HMAC 서명: 데이터 무결성이 목표라면 HMAC 서명을 사용하여 데이터가 변조되지 않았는지 확인하세요.

AES-GCM 암호화: AES-GCM은 Galois/카운터 모드 블록 암호화를 사용하여 Fernet과 유사하지만 사용자 친화적인 기능은 없지만 암호화 및 무결성 보장을 모두 제공합니다.

위 내용은 Python에서 비밀번호를 사용하여 문자열을 안전하게 암호화하고 해독하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿