You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3生成AES加密用16字节真随机字符串技术问询

生成AES加密用的16字节随机密钥(Python 3)

嘿,关于生成AES用的16字节随机密钥,你选os.urandom()绝对是找对路子了——这确实是Python里获取加密安全随机数的标准方案,直接从系统的安全随机源取数据,完全符合AES-128对16字节密钥的要求。我猜你可能是在补全代码或者后续密钥处理时遇到了卡点?下面给你一个完整的可运行示例,顺便聊聊容易踩的坑:

from os import urandom
from Crypto.Cipher import AES
from base64 import b64encode
import sys

# 核心操作:生成16字节(128位)的加密安全随机密钥
rnd_key = urandom(16)

# 示例:用这个密钥完成一次完整的AES加密流程(注意:ECB模式仅作演示,实际别用!)
cipher = AES.new(rnd_key, AES.MODE_ECB)
plaintext = b"Hello AES Encryption"

# AES要求明文长度是块大小(16字节)的整数倍,这里用PKCS#7填充补全
pad_length = AES.block_size - len(plaintext) % AES.block_size
padded_plaintext = plaintext + bytes([pad_length]) * pad_length

# 加密并转Base64方便存储/传输
ciphertext = cipher.encrypt(padded_plaintext)
encoded_key = b64encode(rnd_key).decode('utf-8')
encoded_ciphertext = b64encode(ciphertext).decode('utf-8')

print(f"生成的16字节随机密钥(Base64编码): {encoded_key}")
print(f"加密后的密文(Base64编码): {encoded_ciphertext}")

几个关键注意点:

  • 别乱转密钥的编码:urandom()返回的是bytes类型,这正是AES库需要的格式。要是你尝试用rnd_key.decode('utf-8')把它转成普通字符串,大概率会碰编码错误——因为随机字节几乎不可能全是合法的UTF-8字符。存密钥要么直接存字节,要么用Base64、十六进制转成安全的字符串格式。
  • 别用ECB模式:示例里用ECB只是为了简化演示,实际生产环境一定要用带认证的模式,比如AES-GCM,它能同时保证加密的机密性和完整性,避免篡改风险。
  • 依赖安装:如果你还没装pycryptodome,得先跑pip install pycryptodome,不然Crypto.Cipher模块会找不到。

内容的提问来源于stack exchange,提问作者black

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:27:31