2014-07-18 1 views
0

원래 PHP 인증 확인을 python3으로 옮겨야합니다. 이 같은 코드를 가지고 :PHP Bcrypt가 Python3으로 이동

// hash from db 
$hash = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e"; 

// the hash is used as salt 
$result = crypt($password, $hash); 

//result should match the hash if pasword is correct 
$result = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e"; 

그것은 매개 변수의 비용으로 수행 =

python3에서 그것을 구현하는 가장 좋은 LIB은 무엇입니까 (14)?

편집 : 나는 py-bcrypt을 사용했습니다.

>>> import bcrypt 
>>> password = "ahoj" 
>>> db_hash = "$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e" 
>>> computed_hash = bcrypt.hashpw(password, db_hash) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Invalid salt 

소금이 유효하지 않은 이유는 무엇입니까? PHP에서

그것은 작동합니다

password=ahoj 
hash=$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e 
result=$2y$14$00sMXcXPyTthEv9m5dszwuT8VUU6KK1HtCunemfutphrbCHZoIz0e 

파이썬에서 다른 무엇입니까? 당신이 암호를 비교하려면

+0

표준 bcrypt 해시이므로 모든 라이브러리에서 처리합니다. –

답변

1

hashpw 대신 checkpw 기능을 사용 : 당신은에서 자세한 내용을 찾을 수 있습니다

hashed = bcrypt.hashpw(password, bcrypt.gensalt()) 

:

if bcrypt.checkpw(passsword, db_hash): 
    print "It matches" 
else: 
    print "It does not match" 

소금이 새로운 해시를 생성하는 경우에만 필요 README 파일

+0

답장을 보내 주셔서 감사합니다. 아직도 작동하지 않습니다. 나는 점점 ** ValueError : 유효하지 않은 hashed_password salt ** –

+1

@JoeBobson : "$ 2y"를 "$ 2a"로 바꾸십시오. -'py-bcrypt'는 그 순간을 이해합니다. 대부분의 암호에 대해서는 차이가 없어야합니다. – hop

+0

예! 그게 전부 야. 대단히 감사합니다 :-) –