[Python-de] Crypto mit Python2-Hausmitteln?.

Christian Baier chrbaier at gmx.de
So Jun 30 16:38:56 EDT 2019


Hi,

gibt es hier Cryptoexperten?

Ich habe da einen Rechner, auf dem ich einen Passwortmanager für
(vorgegebene!) Passwörter brauchen könnte, aber keine fremde Software
ausführen darf, außer Python2.7-Scripte.

Und ich frage mich gerade: Ist das wirklich schon alles was ich brauche,
oder habe ich einen Denkfehler?:

---8<---
#!/usr/bin/python2
import hashlib, getpass

#dictionary pl mit { "Dienstname" : "crypted Text" }:
pl = {
         'test': 'M\xa2X\xdeU-y(\\\xad\xc8YV\x1d\x18\x9d',
         'Geheimnis': '>\xcdvA\t\x9c\x82\xb3\xd9\xd8eI\x1amh\xde',

       }

def xor(data, service, masterpassword ):
     salt = ( "g\x9b#\xaeG\xffM\x1a\xa3\t&;\xdb\xbe\xcd6\x04X"
            + "\xa9z\x03\x86\xb7K\xff\xa1\xd7uR`\xa1\x16\xc5"
            + "\x91\x02\xa7y;f\x9b\x19%\x86\xea" )
     initstr = service + salt + masterpassword
     # zum verlangsamen: * 1000000
     h = hashlib.sha512( initstr * 1000000 )
     key = h.digest()
     # Passwortlaenge verschleiern, mind. 16
     data = data + " " * ( 16 - len( data ) )
     while len( data ) > len( key ):
         h.update( initstr )
         key += h.digest()
     return "".join( [ chr( ord( chardata ) ^ ord( charkey ) ) for (
chardata, charkey ) in zip( data, key ) ] )

if __name__ == '__main__':
     masterpassword = ""
     while len( masterpassword ) < 8:
         masterpassword = getpass.getpass( """Geben Sie das
Master-Passwort ein: """ )
     print( "\nGespeicherte Dienste:\n" )
     for service in sorted( pl ):
         print( service )

     checked = False
     while True:
         service = raw_input("\nDienst:")
         cryptedpassword = pl.get( service, None )
         if cryptedpassword:
             print( xor( cryptedpassword, service, masterpassword ) )
         else:
             print( """\nDienst noch unbekannt. Bitte 2 x das zu
chiffrierende Passwort eingeben.""" )
             newpassword = "********"
             passw_check = "--------"
             while passw_check != newpassword:
                 newpassword = passw_check
                 passw_check = getpass.getpass( "Neues Passwort:" )
             if checked or masterpassword == getpass.getpass( """Geben
Sie noch mal das Master-Passwort ein: """ ):
                 checked = True
                 print( """\nDictionary pl im Quelltext erweitern mit:\n
%s: %s,\n""" % ( repr( service ), repr( xor( newpassword, service,
masterpassword ) ) ) )

--->8---

Habe hier ein schwaches Masterpasswort verwendet,
...falls jemand mein Geheimnis knacken möchte ;-)

Freue mich auf Rückmeldungen!

Gruß
Christian


Mehr Informationen über die Mailingliste python-de