현재 위치: > 최신 기사 목록> Crypt () 및 OpenSSL_*를 혼합하기 위해 사용자 정의 암호화 프로세스를 구축하십시오.

Crypt () 및 OpenSSL_*를 혼합하기 위해 사용자 정의 암호화 프로세스를 구축하십시오.

M66 2025-05-28

안전한 PHP 애플리케이션을 구축 할 때 개발자는 종종 데이터 저장 암호화, 사용자 암호 보호, 데이터 전송 암호화 등을 포함하여 암호화 요구에 직면합니다. PHP는 다양한 암호화 방법을 지원합니다. Crypt () 기능은 비밀번호 해싱에 적합한 반면, OpenSSL_* 시리즈 기능은 Symmetric 및 Assymmetric Encryption에 적합합니다.

이 기사에서는 Crypt ()OpenSSL_* 기능을 사용하여 암호 해시 보안 및 데이터 암호화 유연성을 모두 고려하기 위해 사용자 정의 암호화 프로세스를 구축합니다.

1. 사용자 정의 암호화 프로세스에 대한 아이디어

우리는 다음과 같은 목표를 달성하기를 희망합니다.

  1. 사용자 비밀번호 해싱 - crypt ()를 사용하여 돌이킬 수없는 해싱을 수행하십시오.

  2. 데이터 암호화 - OpenSSL 대칭 암호화 알고리즘을 사용하여 사용자 민감한 데이터 암호화;

  3. 키 보호 - 암호화 프로세스의 보안을 보장하기 위해 키를 생성하고 관리합니다.

  4. 데이터 암호 해독 - 올바른 키가 있다면 암호 텍스트를 일반 텍스트로 복원 할 수 있습니다.

2. 비밀번호 해시 : crypt () 사용

crypt () 는 해싱 비밀번호의 기능입니다. 암호 해싱을위한 입증 된 알고리즘 인 BCrypt 알고리즘을 사용하는 것이 좋습니다.

 function hash_password($password) {
    $salt = '$2y$10$' . substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);
    return crypt($password, $salt);
}

비밀번호 확인 :

 function verify_password($password, $hash) {
    return crypt($password, $hash) === $hash;
}

3. 대칭 암호화 : Openssl_encrypt () 사용

이메일 및 ID 번호와 같은 사용자 민감성 데이터를 암호화하기 위해 AES-256-CBC 와 같은 OpenSSL의 대칭 암호화 방법을 사용합니다.

암호화 기능 :

 function encrypt_data($plaintext, $key) {
    $iv_length = openssl_cipher_iv_length('AES-256-CBC');
    $iv = openssl_random_pseudo_bytes($iv_length);
    $ciphertext = openssl_encrypt($plaintext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $ciphertext);
}

암호 해독 기능 :

 function decrypt_data($encrypted, $key) {
    $data = base64_decode($encrypted);
    $iv_length = openssl_cipher_iv_length('AES-256-CBC');
    $iv = substr($data, 0, $iv_length);
    $ciphertext = substr($data, $iv_length);
    return openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
}

4. 암호화 키를 생성합니다

OpenSSL_RANDOM_PSEUDO_BYTES ()를 사용하여 보안 키를 생성 할 수 있습니다.

 function generate_secure_key($length = 32) {
    return base64_encode(openssl_random_pseudo_bytes($length));
}

실제 프로젝트에서는 코드에서 하드 코딩되지 않고 환경 변수 또는 키 관리 서비스 사용과 같은 키를 저장하는 안전한 방법을 사용해야합니다.

5. 실제 사용 사례

 $password = 'myStrongPassword123!';
$hashed = hash_password($password);

if (verify_password('myStrongPassword123!', $hashed)) {
    echo "비밀번호 확인이 통과되었습니다\n";
}

$key = base64_decode('pL2u0xJNzYX2+x5sK8Xt5c34BLTPWhMHn0h0snA4MlQ='); // 샘플 키
$secret = '사용자 이메일: user@example.com';
$encrypted = encrypt_data($secret, $key);
$decrypted = decrypt_data($encrypted, $key);

echo "암호화 된 데이터: $encrypted\n";
echo "해독 된 데이터: $decrypted\n";

6. 안전 조언

  1. 데이터 전송에 HTTPS를 사용하고 암호화 된 데이터는 일반 텍스트 채널을 통해 전송되어서는 안됩니다.

  2. 키 관리는 시스템 보안의 핵심이며 Hashicorp Vault와 같은 보안 모듈과 협력하는 것이 좋습니다.

  3. 키와 알고리즘을 정기적으로 회전시킵니다.

  4. 암호화 키를 GIT 저장소 또는 프론트 엔드 코드로 하드 ​​코딩하지 마십시오.

  5. 정기적으로 암호화 프로세스와 알려진 취약점을 적시에 감사합니다.

7. 응용 시나리오 확장

crypt ()elssl_* 의 조합은 사용자 인증 및 민감한 데이터 암호화가 필요한 시나리오에 적합합니다.

  • 은행 카드 번호 및 ID 카드의 암호화 된 저장;

  • 사용자 채팅 기록 또는 개인 정보를 보호합니다.

  • 사용자 비밀번호와 데이터를 분리하기 위해 다층 보안 메커니즘을 구축합니다.

  • 배경에서 암호화 된 데이터를 정기적으로 자동 해독하고 분석합니다 (주요 누설 문제에 대해 매우 신중함).

8. 결론

Crypt () 의 돌이킬 수없는 해싱 함수와 OpenSSL의 대칭 암호화 기능을 결합함으로써 사용자 암호 관리에 적합한 비교적 완전하고 안전한 암호화 시스템을 설정하고 데이터 암호화 저장소의 요구를 충족시킬 수 있습니다. 비즈니스 요구와 보안 위협의 발전 으로이 솔루션은 확장 성이 우수합니다.

보다 관련된 구현 계획 및 모범 사례를 보려면 공식 문서 또는 커뮤니티 토론 플랫폼을 방문 할 수 있습니다.