加密和解密 PHP 字符串
问题:
我们如何加密和解密 PHP 字符串,需要原始字符串和盐或密钥
答案:
在继续之前了解加密和身份验证之间的区别至关重要。为了实现强大的安全性,我们建议使用加密身份验证,这需要先加密然后进行身份验证。
避免创建自己的加密技术;相反,使用由密码学专家开发的可靠库。我们强烈建议使用 libsodium 或 defuse/php-encryption,因为它们易于使用且内置经过身份验证的加密。
加密步骤:
解密步骤:
设计注意事项:
何时不使用加密:
Libsodium PHP 示例:
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 ) ); return $cipher; }
利钠解密:
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 ); return $plain; }
defuse/php-加密 示例:
use Defuse\Crypto\Crypto; use Defuse\Crypto\Key; $message = 'We are all living in a yellow submarine'; $key = Key::createNewRandomKey(); $ciphertext = Crypto::encrypt($message, $key); $plaintext = Crypto::decrypt($ciphertext, $key);
以上是如何使用 Libsodium 或 defuse/php-encryption 安全地加密和解密 PHP 字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!