gpt4 book ai didi

python - 使用 pyca/cryptography 的 DES 密码 (PBEWithMD5AndDES)

转载 作者:行者123 更新时间:2023-12-01 01:17:00 32 4
gpt4 key购买 nike

为了支持某些遗留应用程序,我需要在 python 中实现 PBEWithMD5AndDES ( RFC2898 Section 6.1 )。我知道这是不安全的,已被弃用,不应再使用。但遗憾的是,这就是我的要求。

我已经有一个使用 PyCrypto/PyCryptodome 的工作版本,但我需要引入 PyCryptodome作为对项目的额外依赖,这是我想避免的。因为我们已经在使用pyca/cryptography在我们代码的其他部分,我更喜欢这个库而不是 PyCrypto(dome)。然而,由于 PBEWithMD5AndDES 的性质,我需要 DES 加密支持,但据我所知,pyca/cryptography 仅支持三重 DES (3DES)。

有没有办法使用pyca/cryptography(单一)DES 加密某些内容?基本上我需要用 pyca/cryptography 中的内容替换 Crypto.Cipher.DES 的以下用法:

key, init_vector = _pbkdf1_md5(a_password, a_salt, a_iterations)
cipher = DES.new(key, DES.MODE_CBC, init_vector)
encrypted_message = cipher.encrypt(encoded_message)


**更新**:

感谢@SquareRootOfTwentyThree,我最终得到了这个:
(key, init_vector) = _pbkdf1_md5(a_password, a_salt, a_iterations)
cipher = Cipher(algorithms.TripleDES(key), modes.CBC(init_vector), default_backend())
encryptor = self.cipher.encryptor()
encrypted = encryptor.update(encoded_message)
encryptor.finalize()

def _pbkdf1_md5(a_password, a_salt, a_iterations):
digest = Hash(MD5(), default_backend())
digest.update(a_password)
digest.update(a_salt)

key = None
for i in range(a_iterations):
key = digest.finalize()
digest = Hash(MD5(), default_backend())
digest.update(key)

digest.finalize()

return key[:8], key[8:16]

最佳答案

Is there a way to (single) DES encrypt something using pyca/cryptography?

是的,只需将 8 字节 key 传递给 cryptography.hazmat.primitives.ciphers.algorithms.TripleDES 即可。这将为三重 DES 中的每个 DES 转换使用相同的 key 。

Triple-DES 也称为 DES-EDE,即加密、解密然后加密。如果您对每个加密/解密对使用相同的 key ,则其中一个加密/解密对将产生身份函数,仅留下单个 DES 加密。

<小时/>

请注意,并非所有三重 DES 实现都接受单个 key (因为通常存在单个 DES),但此一个可以:

The secret key. This must be kept secret. Either 64, 128, or 192 bits long. DES only uses 56, 112, or 168 bits of the key as there is a parity byte in each component of the key. Some writing refers to there being up to three separate keys that are each 56 bits long, they can simply be concatenated to produce the full key.

尽管我必须承认,您必须了解三重 DES 的工作原理才能理解该文本。

另请注意,单个 DES 的 DES-EDE 实现目前尚未优化,它执行所有三个操作,即使其中两个操作相互抵消。

关于python - 使用 pyca/cryptography 的 DES 密码 (PBEWithMD5AndDES),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54237266/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com