2017-09-03 1 views
0

특히,이 상수는 새로운 강한 알고리즘 PHP에 추가되면 시간이 지남에 따라 변경하도록 설계되어 참고 php pagePHP의 password_hash() 역 호환이 가능합니까?

"당. 그 때문에, 결과의 길이를 사용의 PASSWORD_DEFAULT 알고리즘을 사용할 때 이 식별자는 시간이 지남에 따라 바뀔 수 있으므로 결과를 60 자 이상으로 확장 할 수있는 데이터베이스 열에 저장하는 것이 좋습니다 (255자를 선택하는 것이 좋음). "

"참고 :이 기능에 의해 지원되는 알고리즘 업데이트 (또는 기본 하나의 변경)은 다음과 같은 규칙을 따라야합니다 : 는 모든 새 알고리즘은 PHP 이전에 적어도 1 완전 릴리스의 핵심에 있어야합니다 예를 들어, 7.5.5에 새로운 알고리즘이 추가 된 경우, 7.7 (7.6이 첫 번째 정식 릴리스가 될 것이기 때문에)까지는 디폴트가 될 수 없습니다. 그러나 7.6에서 다른 알고리즘이 추가 된 경우. 0 일 경우 기본값 인 7.7.0도 적용 가능 기본값은 전체 릴리스 (7.3.0, 8.0.0 등)에서만 변경해야하며 개정 릴리스에서는 변경되지 않아야합니다. 현재의 불이행에서 치명적인 보안 결함이 발견 될 경우 비상 사태. "

PHP를 PASSWORD_DEFAULT에 다른 알고리즘을 사용하는 버전으로 업그레이드 할 때 암호가 이전 알고리즘으로 해시 된 경우 사용자가 로그인하지 못하도록합니까?

+1

'password_verify'에 대한 문서를 참조하십시오. – PeeHaa

+0

감사합니다. password_hash()는 반환 된 해시의 일부로 알고리즘, 비용 및 소금을 반환하므로 해시를 확인하는 데 필요한 모든 정보가 포함됩니다.이 기능을 사용하면 확인 기능을 통해 해시를 별도의 저장 공간없이 확인할 수 있습니다. 소금 또는 알고리즘 정보. " – GregCatalano

답변

1

짧은 대답은 '예, 그것은, 스토리지를 제공하는 것이 더 이상 암호 해시 길이에 대한 하위 호환성 수 있습니다 : 암호가 저장된 해시 일치하는 경우

사용 password_verify는 확인합니다.

암호를 생성 할 때 특정 형식으로 가져옵니다.

나는 bcrypt과 더 새로운 argon2i 해시를 사용하여 2 개의 암호를 생성했습니다. (libsodium의 소개와 함께 PHP 7.2에 제공)

FYI : 여기 PHP 코드 7.2가 다운로드되지 않았기 때문에 내 코드는 libsodium 확장자를 기반으로하며, 별칭에 대해서만 sodium_compat을 설치하지 않을 예정입니다. PHP 7.2 구문에는 네임 스페이스가 포함되지 않습니다.

$bcrypt = password_hash('insecurepassword', PASSWORD_BCRYPT); 
$argon2i = \Sodium\crypto_pwhash_str('insecurepassword', \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE); 

var_dump($bcrypt, $argon2i); 

내가 실행할 때 내가 가진 출력은이

string(60) "$2y$10$jiT0NF3u426kguHes8ZBputRE/n9OSdPi5HhHvEWW4mX1XDwKwy1e" 
string(96) "$argon2i$v=19$m=32768,t=4,p=1$Ho4Vzgp5nzQkLlp99P+ViA$bDqX8UUlSnfLRCfFBzBnFhWr/hzHzuuUCfZ0LSIns64" 

두 암호가 동일한 형식 다소에 있었다. $가 폭발하면 암호를 확인하는 데 필요한 각 퍼즐 조각이 생깁니다.

첫 번째 섹션에는 알고리즘이 포함되어 있습니다. bcrypt에 대한 2y, ... argon2i에 대한 argon2i. (깜짝!)

다음 비트는 구성 옵션을 포함하므로 bcrypt의 경우 비용이 발생합니다. argon2i의 경우에는 몇 가지 추가 구성이 있습니다.

마지막 섹션에는 확인할 알고리즘의 실제 암호와 소금이 들어 있습니다.

시각적 인 고장 점검에 대한 자세한 내용은 php docs.

일부 출력을 데모하기 위해 여러 가지 다른 기능을 사용했지만, 이 있는데, 이는 argon2i 해시에 대한 지원을 도입하여 7.2의 기능을 수행합니다. 그 시간이 올 때 당신이 그것을에 대한 암호를 확인하는 bcrypt 또는 argon2i 해시를 주면

그래서, password_verify에 관계없이 "그냥 작동"합니다.

+0

굉장한 대답, 고마워. 알고리즘이 해시에 저장되었다는 것을 알지 못했습니다. – GregCatalano

1

단방향 해시 알고리즘입니까? 해시를 해독 할 수 없습니다.

<?php 
    $hash = 'your-hash'; 

    if (password_verify('pass', $hash)) { 
    echo 'Password is valid'; 
    } else { 
    echo 'Password is not valid!'; 
    } 
관련 문제