- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了支持某些遗留应用程序,我需要在 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)
(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
, or192
bits long. DES only uses56
,112
, or168
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 each56
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/
我已经通过 openssl cli 创建了一个带有 challengePassword 属性 (oid 1.2.840.113549.1.9.7) 的 CSR: openssl req -nodes
为了支持某些遗留应用程序,我需要在 python 中实现 PBEWithMD5AndDES ( RFC2898 Section 6.1 )。我知道这是不安全的,已被弃用,不应再使用。但遗憾的是,这就是
我是一名优秀的程序员,十分优秀!