현재 위치: > 최신 기사 목록> crypt () 함수를 사용할 때 어떤 상황에서 소금이 제공되지 않습니까? crypt ()의 증상 또는 안전 위험은 무엇입니까?

crypt () 함수를 사용할 때 어떤 상황에서 소금이 제공되지 않습니까? crypt ()의 증상 또는 안전 위험은 무엇입니까?

M66 2025-08-05

PHP에서 Crypt () 함수는 문자열 암호화를위한 일반적인 도구이며, 특히 암호의 암호화에 적합합니다. 그것의 작동 원리는 암호화 알고리즘과 소금 값 (소금)에 달려 있습니다. 소금 값은 암호화 과정에서 임의의 값으로, 암호의 복잡성을 높이고 무지개 테이블과 같은 공격 방법에 저항하는 데 사용됩니다.

crypt () 함수의 기본 사용

 <?php
$password = "mypassword";
$salt = '$6$rounds=5000$m66.net$saltstring$'; // ~에 의해 SHA-512 알고리즘 예제,사용자 정의 도메인 이름을 포함합니다 salt
$hash = crypt($password, $salt);
echo $hash;
?>

여기서 소금 값은 암호화 알고리즘 (예 : SHA-512)을 결정할뿐만 아니라 출력 결과의 보안에도 영향을 미칩니다.

소금이 제공되지 않은 경우 성능

두 번째 매개 변수를 전달하지 않고 crypt () 함수를 호출 할 때 (즉, 소금 값이 제공되지 않음) PHP는 다음과 같은 동작을 채택합니다.

  • 성능 1 : 대부분의 시스템 및 PHP 버전에서 Crypt ()는 시스템 기본 또는 빈 소금 값을 사용합니다. 이로 인해 암호화 강도가 크게 감소하고 출력 결과는 무작위성이 부족하여 매우 유사 할 수 있습니다.

  • 성능 2 : 일부 이전 버전의 PHP 또는 운영 체제 환경에서 암호화 결과는 예측할 수 없으며 때로는 암호화되지 않은 원래 문자열을 반환합니다.

  • 성능 3 : 현대 암호화 알고리즘을 지원하는 환경에서 소금 값이 부족하면 암호화 프로세스가 약한 DES 알고리즘으로 돌아갈 수 있으며, 이는 보안이 매우 열악합니다.

소금의 안전 위험은 제공되지 않습니다

  1. 무작위성 부족
    소금의 핵심 역할은 무작위성을 도입하여 동일한 암호가 암호화 될 때마다 다른 결과를 갖도록하는 것입니다. 소금이 없으면 공격자는 사전 계산 된 무지개 테이블을 사용하여 암호를 빠르게 깨뜨릴 수 있습니다.

  2. 잔인한 친화적 <br> 소금이 없으면 동일한 암호의 암호화 결과는 동일하며 무차별의 힘이 크래킹 할 때 동시에 여러 계정이 깨질 수 있습니다.

  3. 약한 암호화 알고리즘으로 다운 그레이드 <br> 소금 값이 지정되지 않으면 Crypt ()는 불안한 DES 알고리즘을 사용하여 퇴보 할 수 있으며, 암호를 암호화 할 비밀번호의 처음 8 자만 가로 릅니다.

  4. 최신 알고리즘 기능 <br>를 활용할 수 없습니다 예를 들어, SHA-256 및 SHA-512는 소금의 반복 횟수를 지정하는 지지대를지지하며 이러한 고급 기능은 소금 없이는 활성화 할 수 없습니다.

안전한 사용 제안

  • 암호화 알고리즘 식별자 및 임의의 소금 문자열을 포함하여 항상 완전 및 사양 호환 소금 값을 지정하십시오 .

  • 간단하거나 고정 된 소금 값을 사용하지 마십시오 . Random_Bytes () 함수를 사용하여 Base64_encode ()를 결합하여 생성하는 것과 같이 무작위로 생성 된 소금 값을 사용하는 것이 좋습니다.

  • 소금 및 알고리즘 선택의 생성을 캡슐화하는 Php의 Password_hash () 와 같은 특수 암호 해시 기능을 고려하여 더 안전하고 편리하게 사용합니다.

예 : crypt ()를 사용하고 적절한 소금 값을 제공하십시오

 <?php
$password = "mypassword";
// 사용 SHA-512,반복 수 5000,소금 값에는 사용자 정의 도메인 이름이 포함되어 있습니다 m66.net
$salt = '$6$rounds=5000$m66.net$' . substr(bin2hex(random_bytes(8)), 0, 16);
$hash = crypt($password, $salt);
echo $hash;
?>

이것은 소금 값의 무작위성을 보장 할뿐만 아니라 암호화 알고리즘과 반복 번호를 명확하게하고 보안 강도를 향상시킵니다.

요약

PHP에서 Crypt () 함수가 소금 값을 제공하지 않으면 암호화 결과의 보안을 크게 줄이고 공격자가 쉽게 활용할 수 있습니다. 소금 값은 동일한 암호가 동일한 해시를 생성하는 것을 방지하는 핵심 일뿐 만 아니라 암호화 알고리즘과 강도를 지정합니다. 따라서 어쨌든 Crypt () 에는 안전 위험을 피하기 위해 적절한 소금 값이 명확하게 제공되어야합니다 .