2010-03-12 24 views
10

Quel est le meilleur module/paquet en python à utiliser des/3des pour le chiffrement/décryptage. quelqu'un pourrait fournir un exemple pour crypter des données avec des/3des sur python.en utilisant DES/3DES avec python

Répondre

17

pyDes peut être utilisé pour DES et 3DES. Exemple d'utilisation:

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 

Une alternative est le Chillkat Python Encryption Library qui supporte un grand nombre d'algorithmes de chiffrement (y compris DES & 3DES), mais il est pas libre. Exemple d'utilisation:

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 

Quoi qu'il en soit, je souhaite que vous êtes au courant que ni DES, ni 3DES sont considérés comme notamment d'ordre sécuritaire de nos jours, il y a beaucoup de meilleures alternatives (AES, en premier lieu si vous voulez coller aux normes, ou Twofish, Blowfish, etc ...)

+0

>>> print encStr \ None – Ska

+0

print "Encrypted:% r" % d ---> pourquoi pas entre parenthèses – CaTx

+0

ne peut pas concat octets à int ----> erreur dans python 3 ??? – Mehrdad

6

Vous pouvez utiliser le wrapper Python M2Crypto pour OpenSSL. Il a l'avantage d'être rapide (aussi rapide qu'OpenSSL), mais l'inconvénient de la documentation étant limité.

Voici l'exemple my answer-"How to 3DES encrypt in Python using the M2Crypto wrapper? "

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() 
+0

Le lien M2Crypto que vous avez est mort. – BlackVegetable