PHP에서 Crypt () 함수는 암호 암호화에 널리 사용됩니다. 다양한 암호화 알고리즘에 따라 다른 형식의 소금 (소금)을 사용하여 암호의 보안을 향상시킵니다. 비밀번호를 안전하게 유지하려면 소금의 적절한 이해와 사용이 필수적입니다. 이 기사는 일반적인 소금 형식을 자세히 소개하고 일반적인 사용 오류의 예를 제시하며 문제를 피하기위한 제안을 제공합니다.
crypt () 함수는 전달 된 암호와 소금에 따라 암호화 된 문자열을 생성합니다. 소금의 목적은 동일한 암호가 동일한 암호화 결과를 생성하는 것을 방지하고 무지개 테이블 공격을 피하는 것입니다. 다른 암호화 알고리즘에는 다른 형식의 소금이 필요합니다. PHP의 crypt () 함수는 DES, MD5, Blowfish, SHA-256 및 SHA-512와 같은 다양한 알고리즘을 지원합니다.
암호화 알고리즘 | 소금 형식 예 | 설명하다 |
---|---|---|
데스 | "xy" 와 같은 2 자 | 전통적인 DES 암호화는 제한된 문자 세트와 함께 처음 두 문자 만 소금으로 사용합니다. |
MD5 | $ 1 $ [8 비트 문자] $ , 예를 들어 $ 1 $ abcdefgh $ | 소금에 8 비트 문자가있는 $ 1 $ 로고를 사용하여 더 강력한 MD5 암호화를 지원하십시오. |
블로우 피쉬 | $ 2A $ [2 비트 비용] $ [22 비트 문자] $ , 예를 들어 $ 2A $ 10 $ ABCDEFGHIJK1234567890. | 블로우 피쉬 알고리즘, 2 비트 비용 매개 변수, 22 비트 소금 문자, 높은 강도. |
SHA-256 | $ 5 $ [salt] $ , 예 : $ 5 $ saltstring $ | SHA-256을 사용하면 소금 길이가 무제한이지만 약 16자는 권장됩니다. |
SHA-512 | $ 6 $ [salt] $ , 예 : $ 6 $ saltstring $ | SHA-512를 사용하는 것이 더 안전하다고, 소금 길이는 무제한이지만 약 16자는 권장됩니다. |
<?php
// 사용 MD5 알고리즘 암호화 비밀번호,소금 형식을 준수합니다 MD5 필요하다
$password = "mypassword";
$salt = '$1$abcdefgh$'; // MD5 Salt,8 비트 문자
$hashed = crypt($password, $salt);
echo "MD5 hashed password: " . $hashed . "\n";
// 사용 Blowfish 암호화,비용은입니다 10,22 비트 소금 문자
$blowfish_salt = '$2a$10$abcdefghijk1234567890./';
$hashed_bf = crypt($password, $blowfish_salt);
echo "Blowfish hashed password: " . $hashed_bf . "\n";
// 예 URL,도메인 이름을 대체하십시오 m66.net
echo "웹 사이트를 방문하십시오:https://www.m66.net/login\n";
?>
소금 형식 오류 <br> 예를 들어, $ 1 $ 접두사없이 MD5 암호화를 사용하거나 Blowfish Salt가 충분하지 않습니다. 결과는 암호화 알고리즘의 저하 또는 암호화 실패를 초래하고 생성 된 해시는 안전하지 않습니다.
불충분하거나 너무 긴 소금 <br> 다른 알고리즘에는 소금 길이에 대한 요구 사항이 있습니다. 부적절한 길이는 안전성을 감소시킵니다. 너무 길면 잘려서 효과적으로 활용되지 않을 수 있습니다.
소금에는 불법적 인 문자가 포함되어 있습니다
소금에는 특정 문자 세트 만 포함 할 수 있으며 (일반적으로 ./0-9A-Za-Z ) 불법 문자는 암호화 또는 결과 예외에 실패합니다.
같은 소금을 재사용하십시오 <br> 동일한 소금을 사용할 수 있지만 해싱의 무작위성과 보안이 줄어 듭니다. 각 비밀번호에 대해 독특하고 임의의 소금을 생성하는 것이 좋습니다.
솔트 형식을 엄격하게 부착 하고 알고리즘에 따라 올바른 소금 구조와 길이를 선택하십시오.
고정 소금을 피하고 Random_Bytes () 또는 OpenSSL_RANDOM_PSEUDO_BYTES () 와 같은 안전한 랜덤 숫자를 가진 소금을 생성합니다 .
올바른 소금 생성 및 알고리즘 선택을 캡슐화하는 PHP의 내장 비밀번호 _hash () 함수를 사용하고 권장됩니다.
암호화 결과를 확인 하고 암호화 된 문자열에 예상 소금 식별자가 포함되어 있는지 확인하십시오.
복잡한 소금 및 암호화 프로세스를 직접 구현하지 않고 오류의 확률을 줄입니다.
crypt () 함수는 암호 암호화에서 강력하지만 사용시 소금 형식과 내용에 대한 요구 사항이 매우 엄격합니다. 다른 암호화 알고리즘에 해당하는 소금 형식을 이해하고 일반적인 오류를 피하는 것이 암호 보안을 보장하는 데 중요한 부분입니다. 새로운 프로젝트의 경우보다 현대적인 Password_hash () 및 Password_Verify ()를 사용하여 개발 프로세스를 단순화하고 보안을 향상시키는 것이 좋습니다.