비밀번호 해싱이 어떻게 작동하는지 잘 모르겠지만(나중에 구현할 예정임) 지금 데이터베이스 스키마를 만들어야 합니다.
비밀번호를 4~20자로 제한할까 생각 중인데, 암호화 후 해시 문자열의 길이가 달라질 수 있다고 알고 있습니다.
그렇다면 이러한 비밀번호를 데이터베이스에 저장하는 방법은 무엇입니까?
업데이트: 단순히 해시 함수를 사용하여 암호 저장에 대한 충분한 힘이 없습니다. 읽어야 합니다 이 답을 질 여기있을 스레드할 대한 자세한 설명.
비밀번호 해시 알고리즘을 사용할 경우, 또는 같은 주요 있다. 비크리프트 argon2i. 예를 들어, PHP, list. password_hash () 함수를 비크리프트 기본적으로 사용하는.
$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
그 결과 구체화하십시오 60 문자 다음과 비슷한 (단, 이 숫자는 달라질 수 있기 때문에 독특한 생성하는지 소금).
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Sql 을 사용하여 데이터를 저장할 수 있는 '유형' 챨 (60) 이 인코딩입니다 비크리프트 해시보다. 이 기능은 # 39 의 진수 숫자 문자열로 인코딩합니다 doesn& 참고, t, t 스토어에서 can& # 39 로, 따라서 이를 쉽게 운헤스 이진.
아직 아닌 다른 해시 함수를 사용하여 저장하기 위한 비밀번호란 도왔으매 I& # 39, ll keep the original 오토메이티드 아래에 서면 (2008년).
해시 알고리즘을 사용하면 따라 다릅니다. 길이 관계없이 항상 같은 결과를 만들어 해싱 입력입니다. 이는 일반 텍스트 형식으로 이진 해시보다 결과를 나타내는 등 일련의 진수 자리입니다. ['운헤스 ()'] [3] 기능을 사용할 수 있고 일련의 진수 숫자 절반으로 줄일 수 있습니다.
[5] [사용할 것을 sha-256 이상] (2015년 기준), nist 의 애플리케이션을 필요로 하는 모든 해시 함수가 상호 운용성. 그러나 이러한 간단한 암호 저장에 대한 해시 함수를 안전하게 NIST 사용을 권장하지 않습니다.
해시 알고리즘을 사용하여 그 같은 응용 프로그램에 대한 내부 아닌 교환) 을 가지고 있지만 이들은 [깰 것으로 알려진] [6].
[3]: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html # function_unhex
[6]: pbarreto/hflounge.html ://www.larc.usp.br/ ~ http://web.archive.org/web/20081222011930/http
[Argon2] (https://en.wikipedia.org/wiki/Argon2) 2015년 우승을 암호 해시 경쟁을 벌이고 있다. [스크로프트] (https://en.wikipedia.org/wiki/Scrypt), [비크리프트] (https://en.wikipedia.org/wiki/Bcrypt) 및 [PBKDF2] (https://en.wikipedia.org/wiki/PBKDF2) 은 근본적으로 사운드, 그래서 지금은 아직 덜 간주되는 tfsnap 알고리즘 기본 플랫폼 doesn& 경우 # 39 을 (를), s, t 지원 Argon2 아직말이에요, it& # 39 사용 중인 다른 알고리즘입니다 됐다.
결코 암호를 저장하는 데이터베이스에 직접. # 39 이 암호화합니다 인컨텍스트 don&, t: 그렇지 않으면, 공격자는 사이트에서 얻을 수 있도록 모든 암호 해독 키와 소유하십시오 무너진 가져옵니다. 비밀번호란 hashed 합니다.
암호화 해시 테이블 또는 특성 (properties) 을 각기 다른 한 password hash 해시라고 해시보다. 암호화 해시 같은 MD5 를 사용하지 않는 평범한, SHA-256 또는 sha 512 암호란이. 암호 해시 알고리즘을 사용하며, 이는 고유하므로 salt (사용되지 않고 다른 사용자 또는 누구한테서도 else& # 39 의 데이터베이스). # 39 를 이용해 미리 계산, salt) 은 그냥 일반적인 비밀번호 해시를 필요한 도왔으매 can& t: 소금, 그들은 모든 계산을 통해 재시작하려면 빠르시니라 & # 160; -) 은 암호 해시 알고리즘을 intrinsically slow 때 느린 부담할 수 있다. 공격자가 공격자가 너보다 훨씬 더 심한 시내에 때문에 다양한 비밀번호란 시도하시려면 있다. 자세한 내용은 [어떻게 안전하게 해시보다 비밀번호란] (http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords).
암호 해시보다 인코딩합니다 4 건의 정보:
이 정보를 편리하게 사용할 수 있는 기능 등이 페어당 많은 라이브러리 패키지를 단일 문자열로: 경도 및 임호를 생성하는지 표시자가 초부터 알고리즘입니다 방정식입니다 는 임의의 소금과 되돌려줍니다 전체 해시보다 구체화하십시오. 그것도 는 암호 및 전체 해시보다 문자열이 부울입니다 손실됨을 나열할지 암호를 입력 및 되돌려줍니다 맞자나. # 39 는 보편적 공통 표준 있지만 인코딩입니다 there& 게 전혀 없다.
,,, $ $ < < pre> em> algorithm< /em> < em> parameters<;;;;;;;; $ $ < /em> em> salt< /em> < em> output< /em> < /pre>;;;
여기서 <;;;;;;; /code> < /em> algorithm< em> < code> 는 숫자 또는 짧은 문숫자 구체화하십시오 인코딩입니다 <;;;; /em> parameters< em> code> 중, 알고리즘입니다 < < /code>;; 문자열,,,) 는 인쇄가능 < code> < em> salt< /em> < /code>;; ,,, < /em> output< em> code> 및 < < /code>. base64 인코딩됩니다 종료 없이 '='.
16 바이트) 의 부족하지 소금 및 출력입니다. 자세한 내용은 [권장안이 argon2] (예: https://argon2-cffi.readthedocs.io/en/stable/parameters.html).) # 39 의 Base64 로 that& 21 자, 각. 하지만 일반적인 20 40 문자는 다른 두 개의 부품 및 매개변수입니다 알고리즘입니다 따라 다릅니다. # 39 에 대한 총 82 ASCII 문자 ( that& ('챨 (82)', 그리고 필요 없이 유니코드) 할 수 있는 안전 여백 그렇게 생각한다면 it& # 39 의 추가하기에서는 어려운 현장 확대 될 수 있다.
인코딩합니다 바이너리 형식의 경우 해시 알고리즘을 위한 이해했소 아래로 한 수 있습니다 1 바이트, 1-4 바이트입니다 대한 경도 (하드 코드 경우 일부 매개변수입니다) 및 각 소금과 출력입니다 16 바이트, 총 37 바이트입니다. 40 말하도다 바이트입니다 ('이진 (40)') 에 적어도 몇 스페어를 바이트입니다. 단, 특히 8 비트 필드에 null 문자를 포함할 수 없는 그것은꿈의 바이트입니다 인쇄가능 바이트입니다.
참고로, 길이는 해시보다 완전히 연관해제된 길이에 암호란이.