【问题标题】:How Can I Generate the same key in cryptography如何在密码学中生成相同的密钥
【发布时间】:2021-01-14 10:13:03
【问题描述】:

我正在尝试制作一个对文件进行编码和解码以确保安全的应用程序。

我想要实现的是:

我输入了一个字符串'something',它每次都会生成一个键'some_key='。

我试过这样做:

import os
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.backends import default_backend
from cryptography.fernet import Fernet

backend = default_backend()
salt = os.urandom(16)

kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=100000,
    backend=backend
)
key = base64.urlsafe_b64encode(kdf.derive(b"my great password"))

f = Fernet(f)

但我尝试做的是生成随机密钥。

我不知道该怎么办。请帮忙!

【问题讨论】:

  • 恐怕你必须更多地了解“盐”。它的目的是您试图避免的,即为相同的输入生成不同的散列密码。

标签: python security cryptography key fernet


【解决方案1】:

当使用 PBKDF2、scrypt 或 Argon2 等基于密码的密钥派生函数 (KDF) 时,您需要密码和盐。 salt 的目的是让使用相同的密码短语每次都产生不同的密钥。否则,使用相同密码的每个人都会派生出相同的密钥,这会带来很多安全问题。

这意味着您需要将盐与文件一起存储,以便您可以派生相同的密钥。由于盐必须是唯一的但不是秘密的,因此您可以在加密数据前加上盐,然后在解密时将其剥离。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多