Hướng dẫn ecdh key exchange python - python trao đổi khóa ecdh

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

fromcryptography.hazmat.backendsimportdefault_backend cryptography.hazmat.backends import default_backend
Fromcryptography.hazmat.primitivesimporthashes, đệm cryptography.hazmat.primitives import hashes, padding
fromcryptography.hazmat.primitives.asymmetricimportec cryptography.hazmat.primitives.asymmetric import ec
fromcryptography.hazmat.primitives.kdf.hkdfimportHKDF cryptography.hazmat.primitives.kdf.hkdf import HKDF
fromcryptography.hazmat.primitives.ciphersimportcodes, thuật toán, chế độ cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
fromsecretsimporttoken_bytes secrets import token_bytes
ClassDiffiehellman: DiffieHellman:
def__init __ (tự): __init__(self):
self.diffiehellman = ec.Generate_private_key (ec.secp384r1 (), default_backend ()).diffieHellman = ec.generate_private_key(ec.SECP384R1(), default_backend())
self.public_key = self.diffiehellman.public_key ().public_key = self.diffieHellman.public_key()
self.iv = token_bytes (16).IV = token_bytes(16)
Defencrypt (self, public_key, bí mật): encrypt(self, public_key, secret):
Shared_key = self.diffiehellman.exchange (ec.ecdh (), public_key) = self.diffieHellman.exchange(ec.ECDH(), public_key)
derive_key = hkdf ( = HKDF(
Thuật toán = băm.sha256 (),=hashes.SHA256(),
Chiều dài = 32,=32,
Muối = Không,=None,
thông tin = không có,=None,
backend = default_backend ()=default_backend()
) .Derive (Shared_key)derive(shared_key)
AES = Mật mã (thuật toán. = Cipher(algorithms.AES(derived_key), modes.CBC(self.IV), backend=default_backend())
người mã hóa = aes.encryptor () = aes.encryptor()
padder = padding.pkcs7 (128) .padder () = padding.PKCS7(128).padder()
padded_data = padder.update (secret.encode ()) +padder.finalize () = padder.update(secret.encode()) + padder.finalize()
returnEncryptor.Update (padded_data) +encryptor.finalize () encryptor.update(padded_data) + encryptor.finalize()
defdecrypt (self, public_key, secret, iv): decrypt(self, public_key, secret, iv):
Shared_key = self.diffiehellman.exchange (ec.ecdh (), public_key) = self.diffieHellman.exchange(ec.ECDH(), public_key)
derive_key = hkdf ( = HKDF(
Thuật toán = băm.sha256 (),=hashes.SHA256(),
Chiều dài = 32,=32,
Muối = Không,=None,
thông tin = không có,=None,
backend = default_backend ()=default_backend()
) .Derive (Shared_key)derive(shared_key)
AES = Mật mã (thuật toán. = Cipher(algorithms.AES(derived_key), modes.CBC(iv), backend=default_backend())
người mã hóa = aes.encryptor () = aes.decryptor()
padder = padding.pkcs7 (128) .padder () = decryptor.update(secret) + decryptor.finalize()
padded_data = padder.update (secret.encode ()) +padder.finalize () = padding.PKCS7(128).unpadder()
returnEncryptor.Update (padded_data) +encryptor.finalize () unpadder.update(decrypted_data) + unpadder.finalize()
defdecrypt (self, public_key, secret, iv): = "Hello World!"
AES = Mật mã (thuật toán. = DiffieHellman()
decryptor = aes.decryptor () = DiffieHellman()
decrypted_data = decryptor.update (bí mật) +decryptor.finalize () = bob.encrypt(alice.public_key, text)
Unpadder = padding.pkcs7 (128) .Unpadder ()(encrypted_message)
returnUnpadder.Update (Decrypted_data) +Unpadder.finalize () = alice.decrypt(bob.public_key, encrypted_message, bob.IV)
Text = "Hello World!"(decrypted_message)