2009-07-25 5 views
3

이 질문은 답을 바탕으로 작성되었습니다 on the answer.MySQL 데이터베이스에서 SHA512-hash 암호 사용

암호를 SHA1로 해시 한 다음 Python으로 MySQL 데이터베이스에서 일반 텍스트 암호를 제거하는 방법을 알고 싶습니다.

어떻게 암호를 MySQL 데이터베이스에서 파이썬으로 해싱 할 수 있습니까? 내가 할 수있는 것보다

+2

SHA1을 사용하지 마십시오. SHA2-256 또는 SHA2-512는 훨씬 더 안전한 옵션이며, 새로운 응용 프로그램 인 경우 SHA1을 사용하기위한 이전 버전과의 호환성 요구 사항이 없습니다. – kquinn

+1

암호의 경우 SHA1이 지나치게 과장 될 수도 있습니다. 좋은 소금과 MD5는 대부분의 응용 분야에 충분히 강합니다. –

+5

왜 위험합니까? 더 나은 해시 알고리즘을 사용하는 것은 사소한 변화입니다. (단지'hashlib.md5'를'hashlib.sha512'로 바꾸십시오!) MD5는 죽었고 그걸 모르는 사람들은 패스워드 근처에서 가면 안됩니다. – kquinn

답변

12

설명서에 파이썬 2.5 이후 sha가 아닌 hashlib 라이브러리를 사용해야합니다.

해쉬를 만드는 것은 꽤 쉽습니다.

hexhash = hashlib.sha512("some text").hexdigest() 

이 16 진수는 데이터베이스에 저장하기 쉽습니다.

+5

'hexhash = hashlib.sha512 ("some text"+ salt) .hexdigest()'하는 것이 더 좋을 것입니다. 여기서'salt'는 각 암호에 대해 생성 된 임의의 문자열이고 해시와 함께 DB에 저장됩니다. 레인보우 테이블 공격을 피할 수 있습니다. –

4

http://docs.python.org/library/sha.html

파이썬 문서는이 훨씬 더 설명합니다.

+2

Python 2.5부터 가치가 떨어졌기 때문에 http://docs.python.org/library/hashlib.html#module-hashlib을 사용해야합니다 (2009 년 게시 당시이 답변이 유효 했음에도 불구하고). – Buttons840

1

암호를 해시 할 때 일반 텍스트 암호를 제거하지 마십시오. 당신이하는 일은 사용자로부터의 입력을 받아들이고, 입력을 해시하고, 입력의 해시를 데이터베이스에 저장된 해시와 비교하는 것입니다. 사용자가 가지고있는 일반 텍스트 암호를 저장하거나 보내면 안됩니다.

즉, 최신 버전의 Python에서는 sha 라이브러리 as scrager said (pre-Python 2.5)과 hashlib 라이브러리 as David Raznick said을 사용할 수 있습니다.

7

암호를 데이터베이스에 저장하는 경우 권장되는 기사는 Jeff 's You're Probably Storing Passwords Incorrectly입니다. 이 기사에서는 소금을 사용하는 방법과 잘못된 암호를 저장하는 방법에 대해 설명합니다.

관련 문제