【发布时间】:2018-10-29 17:44:45
【问题描述】:
我目前正在使用Fernet 加密,它使用 AES 128 密钥。但是我的客户需要使用 AES 256。我对密码学不是很熟悉,但这是我目前所了解的。
Fernet 需要一个分成两半的 256 位密钥。前半部分是签名密钥,后半部分是加密密钥。因为它们是 128 位长,所以是 AES 128。
将输入键加倍并像下面这样修改实现以获得 AES 256 是否足够?
class Fernet(object):
def __init__(self, key, backend=None):
if backend is None:
backend = default_backend()
key = base64.urlsafe_b64decode(key) # Here 512 bits long instead of 256
self._signing_key = key[:16] # double this
self._encryption_key = key[16:] # double this
self._backend = backend
【问题讨论】:
-
AES-128 和 AES-256 中的 128 和 256 是 bits 的数量,而不是密钥中的 bytes。正如 Fernet 文档所述:“Fernet 在 CBC 模式下使用 ...AES 和 128 位密钥进行加密;使用 PKCS7 填充。”
-
翻译错误,谢谢。
标签: python encryption cryptography aes python-cryptography