PHP 문자열 암호화 및 복호화 방법
암호화에 관해 논의할 때 암호화와 인증을 구별하는 것이 중요합니다. 일반적으로 암호화와 메시지 인증 코드(MAC)를 결합한 인증된 암호화가 선호됩니다. 보안을 보장하려면 자체 암호화를 구현하는 것을 피하고 대신 암호화 전문가가 개발하고 검토한 잘 확립된 라이브러리에 의존하는 것이 좋습니다.
libsodium을 사용한 암호화 단계:
libsodium을 사용한 암호 해독 단계:
추가 고려 사항:
예제 코드 libsodium:
<?php declare(strict_types=1); /** * Encrypt a message * * @param string $message - message to encrypt * @param string $key - encryption key * @return string * @throws RangeException */ function safeEncrypt(string $message, string $key): string { if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { throw new RangeException('Key is not the correct size (must be 32 bytes).'); } $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); $cipher = base64_encode( $nonce. sodium_crypto_secretbox( $message, $nonce, $key ) ); sodium_memzero($message); sodium_memzero($key); return $cipher; } /** * Decrypt a message * * @param string $encrypted - message encrypted with safeEncrypt() * @param string $key - encryption key * @return string * @throws Exception */ function safeDecrypt(string $encrypted, string $key): string { $decoded = base64_decode($encrypted); $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit'); $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit'); $plain = sodium_crypto_secretbox_open( $ciphertext, $nonce, $key ); if (!is_string($plain)) { throw new Exception('Invalid MAC'); } sodium_memzero($ciphertext); sodium_memzero($key); return $plain; } ?>
위 내용은 libsodium을 사용하여 PHP 문자열을 안전하게 암호화하고 해독하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!