python对称加密怎样实现认证

avatar
作者
筋斗云
阅读量:0

在Python中,实现对称加密并添加认证(即消息完整性检查)通常涉及以下步骤:

  1. 选择一个对称加密算法,如AES(高级加密标准)。
  2. 生成一个随机的密钥,并使用该密钥加密消息。
  3. 使用一个消息认证码(MAC)或数字签名算法来生成认证标签。这可以确保消息在传输过程中未被篡改。
  4. 将加密后的消息和认证标签一起发送给接收方。
  5. 接收方使用相同的密钥和算法来解密消息并验证认证标签。

以下是一个使用pycryptodome库实现AES对称加密和HMAC认证的示例:

from Crypto.Cipher import AES from Crypto.Random import get_random_bytes from Crypto.Util.Padding import pad, unpad from Crypto.Hash import HMAC import base64  # 生成随机密钥 key = get_random_bytes(16)  # AES-128需要16字节密钥  # 加密消息 message = b"Hello, world!" cipher = AES.new(key, AES.MODE_CBC) ct_bytes = cipher.encrypt(pad(message, AES.block_size)) iv = base64.b64encode(cipher.iv).decode('utf-8') ct = base64.b64encode(ct_bytes).decode('utf-8')  # 生成HMAC认证标签 hmac = HMAC.new(key, digestmod=hashlib.sha256) hmac.update(ct_bytes) auth_tag = base64.b64encode(hmac.digest()).decode('utf-8')  # 发送加密消息和认证标签 print("Encrypted message:", ct) print("IV:", iv) print("Authentication tag:", auth_tag)  # 接收方使用相同的密钥和算法来解密消息并验证认证标签 # 假设接收方已知iv和auth_tag received_ct = base64.b64decode(ct) received_iv = base64.b64decode(iv) received_auth_tag = base64.b64decode(auth_tag)  cipher = AES.new(key, AES.MODE_CBC, received_iv) pt = unpad(cipher.decrypt(received_ct), AES.block_size)  hmac = HMAC.new(key, digestmod=hashlib.sha256) hmac.update(received_ct) calculated_auth_tag = base64.b64encode(hmac.digest()).decode('utf-8')  if calculated_auth_tag == received_auth_tag:     print("Message integrity verified.")     print("Decrypted message:", pt.decode('utf-8')) else:     print("Message integrity check failed.") 

请注意,这个示例仅用于演示目的。在实际应用中,您可能需要考虑更多的安全因素,如密钥交换、加密模式的选择、填充方案等。同时,确保在实际部署中使用安全的通信协议,如TLS/SSL。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!