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
相关产品推荐
相关产品推荐

