php怎么使用key加密解密
原创PHP中使用Key进行加密和解密的方法
在PHP中,有多种行为可以使用密钥(Key)来加密和解密数据。下面将介绍几种常用的方法。
1. 使用mcrypt扩展
mcrypt是一个PHP的扩展,提供了多种加密算法。以下是一个使用mcrypt和AES算法进行加密解密的例子:
// 加密
function encrypt($data, $key) {
$cipher = mcrypt_module_open('rijndael-128', '', 'cbc', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($cipher), MCRYPT_RAND);
mcrypt_generic_init($cipher, $key, $iv);
$encrypted = mcrypt_generic($cipher, $data);
mcrypt_generic_deinit($cipher);
return base64_encode($iv . $encrypted);
}
// 解密
function decrypt($data, $key) {
$data = base64_decode($data);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = substr($data, 0, $iv_size);
$data = substr($data, $iv_size);
$cipher = mcrypt_module_open('rijndael-128', '', 'cbc', '');
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher, $data);
mcrypt_generic_deinit($cipher);
return trim($decrypted);
}
注意:mcrypt扩展已在PHP 7.1.0中被废弃,并在PHP 7.2.0中被移除。所以,建议使用其他现代的加密库。
2. 使用OpenSSL扩展
OpenSSL是另一个有力的加密库,它拥护多种加密算法。以下是一个使用OpenSSL和AES算法进行加密解密的例子:
// 加密
function encryptWithOpenSSL($data, $key) {
$method = 'AES-256-CBC';
$ivLength = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($ivLength);
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $encrypted);
}
// 解密
function decryptWithOpenSSL($data, $key) {
$data = base64_decode($data);
$method = 'AES-256-CBC';
$ivLength = openssl_cipher_iv_length($method);
$iv = substr($data, 0, $ivLength);
$data = substr($data, $ivLength);
return openssl_decrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
}
3. 使用defuse/php-encryption库
defuse/php-encryption是一个现代的、可靠的PHP加密库,它提供了单纯易用的API。你可以通过Composer安装这个库,然后使用它进行加密和解密:
// 安装
composer require defuse/php-encryption
// 加密
use Defuse\Crypto\Key;
use Defuse\Crypto\Crypto;
$key = Key::createNewRandomKey();
$encrypted = Crypto::encrypt($data, $key, true);
// 解密
$decrypted = Crypto::decrypt($encrypted, $key, true);
以上就是在PHP中使用Key进行加密和解密的几种常用方法。在实际应用中,请采取你的需求和环境选择合适的加密库和算法。同时,确保你的密钥可靠,不要泄露给未经授权的人员。