TypeError: must be string oder buffer, kein int
ich versuche zu lösen, die Rainbow Tables
Problem mit der Passwort-Verschlüsselung und kommen nur so weit.
import sys
import random
import hashlib
def mt_rand (low = 0, high = sys.maxint):
"""Generate a better random value
"""
return random.randint (low, high)
def substr (s, start, length = None):
"""Returns the portion of string specified by the start and length
parameters.
"""
if len(s) >= start:
return False
if not length:
return s[start:]
elif length > 0:
return s[start:start + length]
else:
return s[start:length]
def unique_salt():
return substr(hashlib.sha1(mt_rand()),0,22)
password = "12345"
salt = unique_salt()
hash = hashlib.sha1(salt + password).hexdigest()
print(hash)
Bin ich immer diese Fehlermeldung:
Traceback (most recent call last):
File "C:/Users/Ajay/PycharmProjects/itertools/test.py", line 27, in <module>
salt = unique_salt()
File "C:/Users/Ajay/PycharmProjects/itertools/test.py", line 24, in unique_salt
return substr(hashlib.sha1(mt_rand()),0,22)
TypeError: must be string or buffer, not int
Ich weiß, ich bin fehlt etwas sehr trivial, kann aber nicht bekommen, wo ich vermisst werde.
Bitte Helfen Sie.
hashlib.sha1
braucht einen string, der gehasht, aber Sie setzen eine ganze Zahl. Was willst du hash?- Ich möchte hash-Passwort, das ist eine
string
. - Und was ist der
unique_salt
Funktion für? - Ich möchte eine zufällige Zeichenfolge generiert für jeden Benutzer und für die Verwendung der einzigartigen Salz.
- Relevante Artikel: crackstation.net/hashing-security.htm
- Du machst es falsch. 1) Sie RNG ist zu schwach. Verwenden
SystemRandom
statt 2) verwenden Sie eine Allzweck-crypto-hash (SHA-1, SHA-2, etc.) statt eine spezielle Passwort-hash.
Du musst angemeldet sein, um einen Kommentar abzugeben.
hashlib.sha1
akzeptiert eine Zeichenfolge als parameter.Aber du bist die übergabe eines int-Objekt. (Der Rückgabewert der
random.randint
istint
Objekt, wie der name andeutet)Können Sie
os.urandom
zu generieren zufällige Zeichenfolge:def unique_salt(): return hashlib.sha1(os.urandom()).hexdigest()[:22]
digest
/hexdigest
im obigen Kommentar.Können Sie verwenden python eingebaute Funktion
type
zu inspizieren Objekte.Dies ist zu erwarten. Pass hashlib.sha1-Hash einer Zeichenkette statt.
hashlib.sha1
braucht einen string, der gehasht, aber Sie setzen eine ganze Zahl.Konvertieren Sie es in den ersten string:
Hier ist ein bisschen demo: