php实现扩展加密解密
PHP 扩展加密解密方法
使用 OpenSSL 扩展
PHP 的 OpenSSL 扩展提供了强大的加密解密功能。以下是一个使用 AES-256-CBC 加密算法的示例:
$plaintext = "需要加密的数据";
$key = openssl_random_pseudo_bytes(32); // 256位密钥
$iv = openssl_random_pseudo_bytes(16); // 初始化向量
// 加密
$ciphertext = openssl_encrypt(
$plaintext,
'aes-256-cbc',
$key,
OPENSSL_RAW_DATA,
$iv
);
// 解密
$original_plaintext = openssl_decrypt(
$ciphertext,
'aes-256-cbc',
$key,
OPENSSL_RAW_DATA,
$iv
);
使用 Sodium 扩展
PHP 7.2+ 内置了 Sodium 扩展,提供了现代加密算法:
$plaintext = "敏感信息";
$key = sodium_crypto_secretbox_keygen(); // 生成密钥
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// 加密
$ciphertext = sodium_crypto_secretbox($plaintext, $nonce, $key);
// 解密
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
使用 Libsodium 兼容函数
对于不支持 Sodium 扩展的环境,可以使用 Libsodium 兼容函数:
$plaintext = "待加密内容";
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// 加密
$ciphertext = sodium_crypto_secretbox($plaintext, $nonce, $key);
// 解密
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
密码哈希处理
对于密码存储推荐使用 password_hash() 函数:

$password = "用户密码";
$hash = password_hash($password, PASSWORD_ARGON2ID);
// 验证密码
if (password_verify($password, $hash)) {
// 密码匹配
}
注意事项
- 始终使用强加密算法(如 AES-256、ChaCha20)
- 确保每次加密使用不同的初始化向量(IV)或 nonce
- 妥善保管加密密钥
- 考虑使用 PHP 7.2+ 的内置加密功能
- 对于密码存储优先使用 Argon2 或 bcrypt 算法






