string hash_pbkdf2 (
string $algo,
string $password,
string $salt,
int $iterations,
int $length = 0,
bool $raw_output = false
)
$ Algo : SHA256 , SHA1 등과 같은 사용 된 해싱 알고리즘을 지정합니다. PHP에서 지원하는 알고리즘이어야합니다.
$ 비밀번호 : 원래 비밀번호 또는 키.
$ 소금 : 동일한 암호가 동일한 해시를 생성하는 것을 방지하기위한 임의의 소금 값.
$ 반복 : 반복의 수수수 수수료가 높을수록 성능 소비량이 높아집니다.
$ 길이 : 출력 키 길이, 기본 0은 출력 해시 알고리즘의 기본 길이를 나타냅니다.
$ raw_output : 이진 형식을 출력할지 여부, 기본 거짓으로 16 진수 문자열을 출력합니다.
hash_pbkdf2('sha999', 'password', 'salt', 1000);
오류의 원인 : SHA999 는 유효한 알고리즘이 아니므로 호출이 실패하거나 경고가 발생됩니다.
솔루션 : Hash_algos () 에 전화하여 지원되는 알고리즘 목록을 가져 와서 올바른 알고리즘을 선택하십시오.
hash_pbkdf2('sha256', 'password', 'salt', 0);
오류의 원인 : 반복 횟수는 양의 정수, 0이거나 음수는 유효하지 않아서 보안이 매우 낮아질 수 있습니다.
솔루션 : 반복 횟수는 최소 1000으로 설정되어야하며 응용 프로그램 보안 요구 사항에 따라 특정 값을 조정해야합니다.
hash_pbkdf2('sha256', 'password', 'salt', 1000, 99999);
오류의 원인 : 지나치게 큰 길이의 요청으로 인해 빈 문자열 또는 성능 병목 현상이 발생할 수 있습니다.
솔루션 : 일반 출력 길이는 해시 알고리즘의 최대 출력 길이를 여러 배 초과하지 않는 것이 좋습니다. 일반적으로 SHA256 의 출력 길이가 32 바이트 인 경우 $ 길이를 설정할 때 합리적이어야합니다.
hash_pbkdf2('sha256', 'password', 'salt', 1000, 64, 'true');
오류의 원인 : $ raw_output은 부울 값이어야합니다. 문자열을 통과하면 유형 경고가 발생하거나 예상 출력 형식을 충족하지 않습니다.
해결 방법 : 진정 또는 거짓 부울 유형으로 명시 적으로 전달됩니다.
$algos = hash_algos();
print_r($algos);
매개 변수 오류를 피하기 위해 현재 PHP 환경에서 지원되는 해시 알고리즘을 확인하십시오.
호출하기 전에 매개 변수를 인쇄하고 매개 변수 값이 올바른지 확인하십시오.
$algo = 'sha256';
$password = 'myPassword';
$salt = 'randomSalt';
$iterations = 1000;
$length = 64;
var_dump($algo, $password, $salt, $iterations, $length);
$key = hash_pbkdf2($algo, $password, $salt, $iterations, $length, false);
echo $key;
안전과 성능 사이의 균형 지점을 찾기 위해 타이밍 함수를 통해 설정된 반복 횟수 후에 소요되는 시간을 관찰하십시오.
$start = microtime(true);
hash_pbkdf2('sha256', 'password', 'salt', 10000);
$end = microtime(true);
echo "시간이 많이 걸립니다:" . ($end - $start) . "두번째";
출력 결과가 예상 길이와 형식을 충족하는지 확인하십시오 (16 진수 또는 이진).
$algo = 'sha256';
$password = 'user_password';
$salt = 'unique_salt_value';
$iterations = 10000;
$length = 64; // 6416 진 문자,동일한32바이트
$raw_output = false;
$derived_key = hash_pbkdf2($algo, $password, $salt, $iterations, $length, $raw_output);
echo "파생 키:" . $derived_key;
여기서 소금은 독특하고 무작위 여야하며 합리적인 반복과 알고리즘이 존재합니다.
HASH_PBKDF2를 사용하는 경우 해시 알고리즘이 유효한지 확인하십시오.
안전과 성능을 보장하기 위해 반복 횟수를 합리적으로 설정해야합니다.
출력 길이와 형식 매개 변수는 기대치와 일치해야합니다.
디버깅 중에 Hash_algos () , var_dump 및 타이밍 기능을 사용하여 위치 문제를 지원할 수 있습니다.
이를 마스터하면 매개 변수 오류로 인한 안전 위험과 프로그램 이상을 피할 수 있습니다.