2010-09-28 10 views

Antwort

23

http://www.dlitz.net/software/pycrypto/ sollte tun, was Sie wollen.

Aus ihrer Dokumentseite entnommen.

>>> from Crypto.Cipher import DES 
>>> obj=DES.new('abcdefgh', DES.MODE_ECB) 
>>> plain="Guido van Rossum is a space alien." 
>>> len(plain) 
34 
>>> obj.encrypt(plain) 
Traceback (innermost last): 
    File "<stdin>", line 1, in ? 
ValueError: Strings for DES must be a multiple of 8 in length 
>>> ciph=obj.encrypt(plain+'XXXXXX') 
>>> ciph 
'\021,\343Nq\214DY\337T\342pA\372\255\311s\210\363,\300j\330\250\312\347\342I\3215w\03561\303dgb/\006' 
>>> obj.decrypt(ciph) 
'Guido van Rossum is a space alien.XXXXXX' 
21

pyDES ist eine DES- und Triple-DES-Implementierung vollständig in Python geschrieben.

Hier ist ein einfaches und portables Beispiel, das sicher genug sein sollte, um grundlegende String-Verschlüsselungsanforderungen zu erfüllen. Einfach das pyDES Modul im selben Ordner wie das Programm und probieren Sie es aus:

Sender Computer

>>> from pyDES import * # pyDes if installed from pip 
>>> ciphertext = triple_des('a 16 or 24 byte password').encrypt("secret message", padmode=2) #plain-text usually needs padding, but padmode = 2 handles that automatically 
>>> ciphertext 
')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2' #gibberish 

des Empfängers Computer

>>> from pyDES import * 
>>> plain_text = triple_des('a 16 or 24 byte password').decrypt(')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2', padmode=2) 
>>> plain_text 
"secret message" 
+1

DANKE! Ich habe nach einem reinen Python-Verschlüsselungs-/Entschlüsselungsschema gesucht (so dass es tatsächlich tragbar ist), und dies ist das einzige, über das ich gestolpert bin. – leetNightshade

10

für Python 2, sollten Sie keyczar http://www.keyczar.org/

für Python 3 bis keyczar ist verfügbar, ich habe einfache crypt geschrieben http://pypi.python.org/pypi/simple-crypt

ich antworte diese zwei Jahre zu spät, da sich die Dinge geändert haben, seit die Frage gestellt wurde.

zur Kenntnis, dass die bisherigen Antworten auf diese Frage schwache Chiffren verwenden (nach heutigen Maßstäben) und haben keine Schlüssel Stärkung. Die zwei Empfehlungen hier sind wahrscheinlich sicherer.

+0

Falls KeyCzar.org nicht umleitet, wie es im August nicht für mich war, ist seine direkte URL https: // github.com/google/keyczar – AnneTheAgile

1

Die einfachste und schnellste Weg, kurze Textfragment mit preshaired Schlüssel zu verschlüsseln, ist eine der cryptohash Funktionen (md5, sha usw.).

d.h. calc md5 des Schlüssels, dann String-Fragment mit diesem md5 Hash xor. Wenn Sie Textfragmente länger als md5 codieren müssen, tun Sie md5 (md5-Hash) und verschlüsseln das nächste Fragment.

Sicherheit dieser Lösung ist schlechter als mit 3-DES aber genug im Durchschnitt (d. H. Nicht sehr sichere Passwort in der Konfigurationsdatei zu speichern) und es erfordert nichts außer Basis Python Distro.

Wenn Sie eine bessere Sicherheit benötigen - suchen Sie nach einem der AES, Blowfish usw. Implementierung, aber um wirklich AES profitieren müssen Sie einige zusätzliche Arbeit tun, um Ihre Daten mit zufälligen diejenigen zu mischen.

1

auf dsamersoff Antwort zu erweitern .. Diese einfache und unsicher ist, aber für bestimmte Aufgaben nützlich sein können. Hier ist ein Code:

import crypt 
import getpass 
import os.path 

def auth_func(): 
    return (raw_input('Username:'), getpass.getpass('Password:')) 

def xor(a,b): 
    assert len(b) >= len(a) 
    return "".join([chr(ord(a[i])^ord(b[i])) for i in range(len(a))]) 

# create a new credentials file if needed 
if not os.path.exists('cred'): 
    with open('cred', 'w') as f: 
     user, pwd = auth_func() 
     f.write ("{}\n".format(user))    
     f.write ("{}\n".format(xor(pwd, crypt.crypt('secret', 'words')))) 
     f.close() 

# read credentials and print user/password 
with open('cred', 'r') as f: 
    user, pwd = f.read().split('\n')[:2] 
    print user 
    print xor(pwd, crypt.crypt('secret', 'words')) 
Verwandte Themen