현재 위치: > 최신 기사 목록> PHP의 Crypt 기능을 사용하여 여러 알고리즘에 대한 소금 템플릿을 동적으로 생성하는 방법은 무엇입니까?

PHP의 Crypt 기능을 사용하여 여러 알고리즘에 대한 소금 템플릿을 동적으로 생성하는 방법은 무엇입니까?

M66 2025-06-11

PHP에서 Crypt 함수는 암호 해싱의 전형적인 기능입니다. DES, MD5, Blowfish, SHA-256 및 SHA-512와 같은 다양한 암호화 알고리즘을 지원합니다. 적절한 소금을 사용하면 암호 보안을 향상시킬뿐만 아니라 암호화 알고리즘 및 해싱의 복잡성을 제어합니다.

이 기사에서는 여러 알고리즘에 대한 소금 템플릿을 동적으로 생성하는 방법을 자세히 설명하여 암호 기능을 사용할 때 알고리즘과 소금 값을 유연하게 지정할 수 있습니다.

암호화 기능의 기본 사용

 $password = 'mypassword';
$salt = '$6$rounds=5000$usesomesillystring$';  // SHA-512 예를 들어 소금
$hash = crypt($password, $salt);
echo $hash;

위의 예에서 $ 6 $는 SHA-512 알고리즘을 사용하는 것을 의미합니다. Rounds = 5000은 암호화 반복의 수를 나타내고 다음 문자열은 소금 값 본체입니다.

다른 알고리즘에 해당하는 소금 형식

연산 소금 접두사 소금 길이와 설명
데스 접두사가 없습니다 2- 특성 소금
MD5 $ 1 $ 8- 특성 소금
블로우 피쉬 $ 2A $ 또는 $ 2Y $ 22 자격 소금 (버전 및 비용 매개 변수 포함)
SHA-256 $ 5 $ 선택적 매개 변수 라운드, 최대 16 자까지의 소금 바디
SHA-512 $ 6 $ 선택적 매개 변수 라운드, 최대 16 자까지의 소금 바디

이것들을 이해 한 후, 우리는 다른 알고리즘을 기반으로 적절한 소금 템플릿을 동적으로 생성 할 수 있습니다.

소금 템플릿을 동적으로 생성하는 기능

다음은 입력 알고리즘 이름을 기반으로 해당 형식으로 소금 템플릿을 생성 할 수있는 PHP 함수의 예입니다.

 function generateSalt($algorithm = 'sha512', $rounds = 5000) {
    // 임의의 소금 바디 생성 기능,길이는 알고리즘 제한에 따라 조정됩니다
    function randomSalt($length) {
        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./';
        $salt = '';
        for ($i = 0; $i < $length; $i++) {
            $salt .= $chars[random_int(0, strlen($chars) - 1)];
        }
        return $salt;
    }

    switch (strtolower($algorithm)) {
        case 'des':
            // DES 소금 이전에만2성격
            return substr(randomSalt(2), 0, 2);

        case 'md5':
            // MD5 소금 형식 $1$salt$
            return '$1$' . randomSalt(8) . '$';

        case 'blowfish':
            // Blowfish 체재 $2y$cost$22charsalt
            $cost = 10;  // 2숫자,권장됩니다04도착하다31~ 사이
            $costStr = str_pad($cost, 2, '0', STR_PAD_LEFT);
            return '$2y$' . $costStr . '$' . randomSalt(22);

        case 'sha256':
            // SHA-256 체재 $5$rounds=xxxx$salt$
            return '$5$rounds=' . intval($rounds) . '$' . randomSalt(16) . '$';

        case 'sha512':
        default:
            // SHA-512 체재 $6$rounds=xxxx$salt$
            return '$6$rounds=' . intval($rounds) . '$' . randomSalt(16) . '$';
    }
}

사용의 예

 $password = 'my_secret_password';

// 선택 알고리즘
$algorithm = 'blowfish';

// 해당 소금 템플릿을 생성합니다
$salt = generateSalt($algorithm);

// 해시를 생성하십시오
$hash = crypt($password, $salt);

echo "연산: {$algorithm}\n";
echo "소금 템플릿: {$salt}\n";
echo "해시를 생성하십시오: {$hash}\n";

이러한 방식으로 암호를 암호화 할 때 사용되는 알고리즘 및 소금 매개 변수를 매우 유연하게 제어하여 보안을 향상시킬 수 있습니다.

추가 조언

  • 보다 안전한 비밀번호 해싱 체계를 사용하여 PHP의 내장 암호 _hashPassword_Verify 함수를 고려하는 것이 좋습니다.

  • 소금 문자열에서 수동으로 스 플라이 싱 매개 변수를 피하십시오. Random_int 와 같은 신뢰할 수있는 임의의 숫자 생성 기능을 사용하는 것이 좋습니다.

  • 보안에 따라 무차별 대구에 저항하는 능력을 향상시키기 위해 보안에 따라 라운드 (반복 수)를 정기적으로 조정하십시오.