在Python中使用DES/3DES

13 投票
2 回答
48743 浏览
提问于 2025-04-15 20:21

在Python中,哪个模块或包最适合用来进行DES或3DES加密和解密呢?有没有人能提供一个用DES或3DES加密数据的例子?

2 个回答

7

你可以使用 M2Crypto 这个Python库,它是为 OpenSSL 提供的一个封装。这个库的好处是速度很快(和OpenSSL一样快),但缺点是文档不太全面。

下面是我在 我的回答 中给出的例子,回答的是 “如何在Python中使用M2Crypto库进行3DES加密?”

with open(keyfile, 'rb') as f:
    key = f.read()
encrypt = 1
cipher = Cipher(alg='des_ede3_ecb', key=key, op=encrypt, iv='\0'*16)
ciphertext = cipher.update(plaintext)
ciphertext += cipher.final()
21

pyDes 可以用来进行 DES 和 3DES 加密。下面是一个简单的使用示例:

from pyDes import *

data = "Please encrypt my data"
k = des("DESCRYPT", CBC, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)
d = k.encrypt(data)
print "Encrypted: %r" % d
print "Decrypted: %r" % k.decrypt(d)
assert k.decrypt(d, padmode=PAD_PKCS5) == data

还有一个选择是 Chillkat Python 加密库,这个库支持很多种加密算法(包括 DES 和 3DES),但它是收费的。下面是一个使用示例:

crypt.put_CryptAlgorithm("des")
crypt.put_CipherMode("cbc")
crypt.put_KeyLength(64)
crypt.put_PaddingScheme(0)
crypt.put_EncodingMode("hex")
ivHex = "0001020304050607"
crypt.SetEncodedIV(ivHex,"hex")
keyHex = "0001020304050607"
crypt.SetEncodedKey(keyHex,"hex")
encStr = crypt.encryptStringENC("The quick brown fox jumps over the lazy dog.")
print encStr
decStr = crypt.decryptStringENC(encStr)
print decStr

不过,我希望你知道,现在大家普遍认为 DES 和 3DES 并不是特别安全,还有很多更好的选择(如果你想遵循标准,推荐使用 AES,或者 Twofish、Blowfish 等等...)

撰写回答