Hash validation python script

Sziasztok,

bcyrpt_pass.txt file tartalma (részlet) soronként:

$2a$10$I6E3U7RkdGM.SANtLA0CN.0/vRXQXgQcmILujAsECIEWmIHg2E6OS:test
$2a$10$JWN47nR8hfeu2h7nYIy2SuJ3rHQnPfLBSXhaicHzrTBEeysvOFDTO:123456
$2a$10$KVmdzwJ93Ub8loWynNyMPOY5MW2u4eZvRDlWaZ8Ca.WW2FOilKkJy:marshall
$2a$10$LueHEZkzc7tkgGHFPfTUt.nM4VYEHZDX6UrRLZ9XleywY5c0.XpGC:123456
$2a$10$Lwfv6gQE7YGZ6kNKlv5hJeonkbNSYuBStFn/ZRUf2vCwNsNmjTvx6:bingo1

wordpress_pass.txt file tartalma (részlet):

$P$BOjK6nuYBraDNtWkbzaM0wz.EOs/xz.:qwerty123456
$P$Bz3HEGUq7g7ITnJa0oM9kBi8iF07Ps/:qwerty1
$P$BmaIITkV/.TzvGXaOqxMXGV9bS9pGc1:1234567890
$P$B/YvRXSgEcKTWPmfeDnj2bFP/F2xEC1:12341234

Hogy tudom ellenőrizni python3-ban, hogy a megadott bcrypt_hash:pass ill. wordpress_hash:pass pár egyezik-e?

Eddig egy lassú módszert használtam. Külön file-ba tettem a hash-t és a jelszavakat, majd hashcat-el ellenőriztem. Ez működik, viszont nagy számú hash-nél már nagyon lassú.

Köszönöm előre is.

Hozzászólások

Futtatás során hibaüzenettel leáll:

raise TypeError("Unicode-objects must be encoded before hashing")
TypeError: Unicode-objects must be encoded before hashing

Mit rontottam el?


import re
import bcrypt

raw = '/root/python_gyakorlas/bcrypt_hashes.txt'
raw_list = list()

with open(raw, 'r') as ll:
for item in ll:
pattern = re.compile(r'([^:]+):([a-zA-Z0-9]+)')
matches = pattern.finditer(item)
for match in matches:
raw_list.append(match.group(1, 2))

for item in raw_list:
password = item[1]
stored_hash = item[0]
# print(stored_hash)
# print(password)

if bcrypt.hashpw(password.encode('utf8'), stored_hash) == stored_hash:
print('Match')
else:
print ('It does not match')

Köszönöm. Javítottam.
Legközelebb használom a [code ] [/code]-ot.

Lefut, de azt írja ki minden esetben, hogy 'It does not match.'
Pedig a hash:password páros jó.

$2y$13$AWPe/tK3sik0dzVQ6PHEB.YO.PTVWIRCGVOzPJiczMCScuk5ikexG
123
It does not match

hashcat-el mégegyszer ellenőriztem.
"hashcat -O -m 3200 -a 3 '$2y$13$AWPe/tK3sik0dzVQ6PHEB.YO.PTVWIRCGVOzPJiczMCScuk5ikexG' 123"

Found:
$2y$13$AWPe/tK3sik0dzVQ6PHEB.YO.PTVWIRCGVOzPJiczMCScuk5ikexG:123

mert a checkpw kell neked:


import bcrypt

password = "123"
hash = "$2y$13$AWPe/tK3sik0dzVQ6PHEB.YO.PTVWIRCGVOzPJiczMCScuk5ikexG"

print(bcrypt.checkpw(password.encode('utf8'), hash.encode("utf8")))

> True

Amúgy nem biztos, hogy sokkal gyorsabb lesz így, mint hashcat-el, mivel a bcrypt szándékosan egy lassú eljárás, így a legtöbb idő a kriptográfiával megy el amiben valószínű a hashcat még jobb is.

Köszönöm a segítséget. Működik és nagyságrenddel gyorsabb, mintha hashcat-el ellenőrizném.

hashcat speed benchmark(CPU only test):
Input: 50 bcrypt hashes

"time hashcat --session=benchmark -p --potfile-disable -O -m 3200 -a 0 hashes.txt passwords.txt"

real 3m44.626s
user 5m24.062s
sys 0m1.909s

"python3 bcrypt_hash_validation.py"

real 0m7.013s
user 0m6.964s
sys 0m0.028s

bcrypt rendben.
Még egy kérdésem lenne. bash scriptekben van arra lehetőség hogy "positional paramameter"-t használva olvassa be a file-t.

Szeretném, ha a script futtatható lenne a köv. formátumban: "python3 python_script.py test_hashes.txt"

python3-ban ez hogy oldható meg?
Elég lesz egy link is.

Köszönöm.