2017-07-05 3 views
-2

Je suis en train de stocker un mot de passe dans une base de données SQLite est ici l'erreur:ne peut pas chiffrer une chaîne et l'insérer dans sqlite

Traceback (most recent call last): 
    File "/media/luis/Vista/Users/Administrador/PycharmProjects/PNV/sqlitetesting.py", line 33, in <module> 
    """, encriptado) 
TypeError: function takes exactly 1 argument (2 given) 

J'utilise Python 2.7, sqlite3 et hashlib. Voici le code:

print "Password nao definida" 
passadefinir = raw_input("Insira a sua password:") 
clear() 
passadefinir2 = raw_input("Insira novamente a sua password") 
if passadefinir == passadefinir2: 
    maindb.execute("DELETE FROM Password WHERE ID = 'not'") 
    maindb.execute("INSERT INTO Password(ID) VALUES ('set')") 
    encriptacao = hashlib.sha1(passadefinir2.encode()) 
    encriptado = (encriptacao.hexdigest(),) 
    print (encriptado) 
    maindb.executescript(""" 
    UPDATE Password 
    SET Password = ? 
    WHERE ID = 'set'; 
    """, encriptado) 
    conn.commit() 
+0

Pourquoi 'maindb.executescript'? Pourquoi ne pas simplement 'maindb.execute'? – phd

+0

@phd Cela a fonctionné en remplaçant 'maindb.executescript' par' maindb.execute'. Avant cela, j'ai utilisé un script alors j'ai oublié de le changer. Merci –

+0

Juste en utilisant une fonction de hachage n'est pas suffisant et juste ajouter un sel fait peu pour améliorer la sécurité. Au lieu de itérer sur un HMAC avec un sel aléatoire pour une durée d'environ 100ms et enregistrer le sel avec le hachage. Utilisez une fonction telle que 'PBKDF2',' Rfc2898DeriveBytes', 'password_hash',' Bcrypt' ou des fonctions similaires. Le but est que l'attaquant passe beaucoup de temps à trouver des mots de passe par force brute. – zaph

Répondre

0

Utilisation maindb.execute au lieu de maindb.executescript:

maindb.execute(""" 
UPDATE Password 
SET Password = ? 
WHERE ID = 'set'; 
""", encriptado) 

PS. Simplement une réponse pour vous d'accepter.