>백엔드 개발 >PHP 튜토리얼 >PHP에서 간단한 양방향 암호화 및 인증을 어떻게 구현할 수 있습니까?

PHP에서 간단한 양방향 암호화 및 인증을 어떻게 구현할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-24 02:10:13221검색

How Can I Implement Simple Two-Way Encryption and Authentication in PHP?

PHP를 사용한 가장 간단한 양방향 암호화

배경

주의: 이러한 방법을 사용하여 비밀번호를 암호화하지 마세요. 대신 안전한 비밀번호 저장을 위해 비밀번호 해싱 알고리즘을 사용하세요.

PHP의 휴대용 데이터 암호화

PHP 5.4 이상을 사용하고 코드 이식성을 원하는 경우 인증된 암호화를 제공하는 기존 라이브러리를 활용하세요. 암호화 방법을 선택하면 openssl_encrypt() 및 openssl_decrypt()와 같은 Openssl 방법을 사용할 수 있습니다.

암호화 및 암호 해독

AES(고급 암호화 표준) 사용을 고려하세요. 암호화를 위한 CTR 모드. 이 방법은 보안과 성능 간의 최상의 균형을 제공합니다. 지원되는 방법 목록은 openssl_get_cipher_methods()를 참조하세요.

OpenSSL을 사용하는 간단한 암호화/복호화 래퍼

다음 PHP 클래스는 OpenSSL을 사용하는 간단한 암호화/복호화 래퍼를 제공합니다.

class UnsafeCrypto
{
    const METHOD = 'aes-256-ctr';

    public static function encrypt($message, $key, $encode = false)
    {
        // ...
        if ($encode) {
            return base64_encode($nonce.$ciphertext);
        }
        return $nonce.$ciphertext;
    }

    public static function decrypt($message, $key, $encoded = false)
    {
        // ...
        $plaintext = openssl_decrypt(
            $ciphertext,
            self::METHOD,
            $key,
            OPENSSL_RAW_DATA,
            $nonce
        );
        
        return $plaintext;
    }
}

간단한 인증 래퍼

향상된 인증용 보안, 암호화된 데이터의 무결성을 확인하기 위한 인증 구현:

class SaferCrypto extends UnsafeCrypto
{
    const HASH_ALGO = 'sha256';

    public static function encrypt($message, $key, $encode = false)
    {
        // ...
        if ($encode) {
            return base64_encode($mac.$ciphertext);
        }
        // Prepend MAC to the ciphertext and return to caller
        return $mac.$ciphertext;
    }

    public static function decrypt($message, $key, $encoded = false)
    {
        // ...
        $calculated = hash_hmac(
            self::HASH_ALGO,
            $ciphertext,
            $authKey,
            true
        );
        
        if (!self::hashEquals($mac, $calculated)) {
            throw new Exception('Encryption failure');
        }
        
        // Pass to UnsafeCrypto::decrypt
        $plaintext = parent::decrypt($ciphertext, $encKey);
        
        return $plaintext;
    }
}

위 내용은 PHP에서 간단한 양방향 암호화 및 인증을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.