저는 파이썬을 배우고 있습니다. hashlib.sha512(salt + password).hexdigest()
이 예상 된 결과를 제공하지 않는 이유를 알 수 없습니다.파이썬에서 hashlib 대 crypt.crypt(). 다른 결과가 나타나는 이유는 무엇입니까?
Ulrich Drepper의 sha512crypt.c algorithm에 해당하는 순수한 Python 구현을 찾고 있습니다. (내가 무엇을 찾고 있는지 알기까지 잠시 시간이 필요했습니다.)
내 우분투 12.04 시스템의 crypt
에 대한 man 페이지에 따르면, crypt는 SHA-512를 사용하고 있습니다 (문자열은 $ 6 $로 시작하기 때문에).
아래 코드는 Python의 시스템 크립트 (crypt.crypt()) 래퍼를 호출 할 때 예상대로 동작하는지 확인합니다. hashlib.sha512 또는 다른 파이썬 lib를 사용하여 crypt.crypt()와 같은 결과를 얻고 싶습니다. 방법?
이 코드는 문제 나 발생하고있어 보여줍니다 crypt 설명서 페이지에 따르면
import hashlib, crypt
ctype = "6" #for sha512 (see man crypt)
salt = "qwerty"
insalt = '${}${}$'.format(ctype, salt)
password = "AMOROSO8282"
value1 = hashlib.sha512(salt + password).hexdigest() #what's wrong with this one?
value2 = crypt.crypt(password, insalt) #this one is correct on Ubuntu 12.04
if not value1 == value2:
print("{}\n{}\n\n".format(value1, value2))
을, SHA-512는 86 개 문자입니다. 위의 코드에서 crypt()
호출은 그에 부합합니다.
051f606027bd42c1aae0d71d049fdaedbcfd28bad056597b3f908d22f91cbe7b29fd0cdda4b26956397b044ed75d50c11d0c3331d3cb157eecd9481c4480e455
$6$qwerty$wZZxE91RvJb4ETR0svmCb69rVCevicDV1Fw.Y9Qyg9idcZUioEoYmOzAv23wyEiNoyMLuBLGXPSQbd5ETanmq/
그러나, hashlib.sha512의 출력은 다음
코드를 실행하지 않는 사람들에 대한 출력의 ... 그래서 뭔가 해제 방법이 두 implmentations 사이에, 86 개 문자 이상입니다
여기에서 초기 피드백을 기반으로하는 또 다른 시도입니다. 아직 성공 다음 crypt()
출력이 base64로 인코딩하기 때문에
import hashlib, crypt, base64
ctype = "6" #for sha512 (see man crypt)
salt = "qwerty"
insalt = '${}${}$'.format(ctype, salt)
password = "AMOROSO8282"
value1 = base64.b64encode(hashlib.sha512(salt + password).digest())
value2 = crypt.crypt(password, insalt) #this one is correct
if not value1 == value2:
print("{}\n{}\n\n".format(value1, value2))
비밀번호합니다 (제외인가 숫자) 포르투갈어로 의도적으로 또는 어색한 우연의 일치입니까? 그냥 호기심 많음':)' – JMCF125
이 암호는 실제 도난당한 암호의 대용량 데이터베이스 중 하나 인 fwiw에서 가져온 실제 암호입니다. – MountainX
나는 본다. 소금이 없다면, 작은 포르투갈어 사전으로 만든 무지개 테이블로 깨지기 쉽습니다. BTW, +1, 파이썬을 사용하지 않지만 흥미로운 질문입니다. – JMCF125