PHP에서 Crypt () 함수는 Blowfish (일반적으로 $ 2y $ 로 표현 됨) 및 SHA-512 ( $ 6 $ 로 사용)를 포함한 다양한 암호화 알고리즘을 지원하는 해시 암호화를위한 중요한 도구입니다. 두 알고리즘 모두 암호 해싱 및 검증에 널리 사용되지만 성능 및 해당 시나리오에서는 크게 다릅니다. 이 기사는 PHP Crypt () 함수에서 Blowfish와 SHA-512의 성능 비교에 대해 자세히 설명하고 예제에 따라 장점과 단점을 분석합니다.
Blowfish는 대칭 키 기반 암호화 알고리즘으로, PHP에서 Bcrypt의 구현 중 하나로 사용하여 강력한 해시 값을 생성합니다. Bcrypt는 기본 비용 계수가 10 인 암호 해싱을 위해 설계되었으며, 이는 중단기 균열을 방지하기 위해 계산 프로세스가 의도적으로 지연 될 것임을 의미합니다.
비밀번호 용으로 설계 : Bcrypt의 디자인 목표는 암호 해싱으로, 무지개 테이블과 무차별 인력 균열에 저항 할 수 있습니다.
조정 가능한 비용 계수 : 비용 매개 변수를 늘리면 해시 난이도를 향상시킬 수 있습니다.
안정적인 성능 : 대부분의 경우 실행 시간은 비교적 안정적이므로 시간 공격을 방지합니다.
$password = 'mypassword';
$hash = crypt($password, '$2y$10$usesomesillystringforsalt$');
echo $hash;
SHA-512는 SHA-2 제품군의 구성원이며보다 일반적인 해시 기능으로, 비밀번호 해싱을 위해 특별히 설계된 것이 아니라 데이터 무결성 검증에 주로 사용됩니다. 또한 PHP의 crypt () 에서도 지원되지만 보안은 소금 값과 응용 컨텍스트에 따라 다릅니다.
빠른 속도 : SHA-512는 Blowfish보다 계산하기가 더 빠르며 비 통신 데이터의 빠른 해싱에 적합합니다.
알고리즘 표준화 : NIST에서 권장하는 표준 해싱 알고리즘이며 파일 체크섬 서명에 널리 사용됩니다.
비용 계수 제어 부족 : Blowfish와 달리 SHA-512는 계산 된 비용을 쉽게 조정할 수 없습니다.
무차별 적 공격에 더 취약합니다 : 빠른 컴퓨팅 속도로 인해 암호 해싱의 잠재적 보안 위험이됩니다.
$password = 'mypassword';
$hash = crypt($password, '$6$rounds=5000$usesomesillystringforsalt$');
echo $hash;
Blowfish와 SHA-512의 성능 차이를 평가하기 위해 동일한 서버 환경에서 다음 테스트를 수행 할 수 있습니다.
$start = microtime(true);
crypt('mypassword', '$2y$10$usesomesillystringforsalt$');
$blowfish_time = microtime(true) - $start;
$start = microtime(true);
crypt('mypassword', '$6$rounds=5000$usesomesillystringforsalt$');
$sha512_time = microtime(true) - $start;
echo "Blowfish시간:{$blowfish_time} 두번째\n";
echo "SHA-512시간:{$sha512_time} 두번째\n";
일반적으로 PHP 운영 환경에서는 Blowfish의 실행 시간이 일반적으로 SHA-512의 실행 시간입니다. 이 "속도"는 (보안을 향상시키기 위해) 설계되었지만 많은 요청을 처리 할 때 성능에 영향을 줄 수 있습니다.
사용자 로그인 시스템을 개발하는 경우 Blowfish (Bcrypt)는보다 안전하고 무차별적인 저항력이 있으므로 Blowfish (BCrypt)를 사용하는 것이 좋습니다.
민감하지 않은 데이터에 대한 고유 식별 생성과 같은 빠른 해시 만 있으면 SHA-512를 사용할 수 있습니다.
php 5.5에서 시작하여 crypt () 대신 password_hash () 및 password_verify ()를 사용하여 암호 해시 로직을보다 쉽고 안전하게 관리 할 수 있음을 주목할 가치가 있습니다.
$hash = password_hash('mypassword', PASSWORD_BCRYPT);
if (password_verify('mypassword', $hash)) {
echo '올바른 비밀번호';
}
crypt () 함수는 여전히 지원되고 암호 해싱에 사용되지만 Blowfish와 SHA-512 사이의 선택은 특정 응용 프로그램 시나리오를 기반으로해야합니다. Blowfish는 더 강력한 암호 보안을 제공하는 반면 SHA-512는 속도 측면에서 최고입니다. 비밀번호 보안이 필요한 시나리오에서는 Blowfish를 선호하고 최신 PHP 암호 처리 기능과 함께 사용하여 시스템의 장기 보안 및 유지 보수를 보장해야합니다.
웹 인증 시스템에서 비밀번호 해싱을 사용하는 개발자의 경우 더 많은 모범 사례에 대해서는 다음 URL을 참조하십시오.
https://m66.net/security/password-hashing