首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3 Fernet加密相同消息的不同方式

Python 3 Fernet加密相同消息的不同方式
EN

Stack Overflow用户
提问于 2019-03-29 19:54:11
回答 1查看 1K关注 0票数 1

我现在正在学习python,正在尝试编写一个加密程序,每次加密相同的消息,我用Fernet实现了这个加密过程。

代码语言:javascript
复制
import base64
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

password_provided = 'examplepassword'
kpassword = password_provided.encode()

salt = b'H&\xb6\n\xe6@\xdf\x13\x88\x98 Z\xf0\xea,\xca\x05\xd7\x99\x105\xa8\xa2{\xa9F\xe0\x91\x89c)\xf8%@]"u<\xe03|\xe2\re]\'\xb7\x89O2\xf9\x0bY\xf5\xb6<\x80z\\bM\x8dDx'
kdf = PBKDF2HMAC(
    algorithm = hashes.SHA256,
    length = 32,
    salt = salt,
    iterations = 100000,
    backend = default_backend()
)
key = base64.urlsafe_b64encode(kdf.derive(kpassword))


k = Fernet(key)
example = k.encrypt(b'ABC')
print(example)

这段代码像我预期的那样工作并加密一次,但Fernet每次都以不同的方式加密它,我不知道为什么。如果有任何方法可以使当前程序每次都以相同的方式加密消息,请帮助,或者如果只是另一种方法来完成我正在尝试做的事情。

如果你建议,不,我90%确定盐不是问题,因为我已经使用os.urandom()尝试了更长和更短的盐,我也尝试了更改密码。

编辑:我正在尝试加密一个人提供的输入,然后其他人提供相同的输入,我想比较加密的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 20:12:32

这里没有错。 Fernet 加密使用 AES-128 和带有 PKCS7 填充的 CBC操作模式。

CBC模式需要一个IV,这个IV是由os.urandom()生成的。所以,每次运行你都会有一个不同的IV,这将改变加密,参见probabilistic encryption

注意:您使用的盐用于密钥生成(PBKDF2HMAC),而不是用于CBC模式的IV。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55416897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档