PHP提供了多种加密解密算法,包括对称加密算法和非对称加密算法。
对称加密算法使用同一个密钥进行加密和解密,常用的对称加密算法有DES、3DES、AES等。
以下是使用AES算法对数据进行加密和解密的示例代码:
php
// 加密函数
function encrypt($data, $key) {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $encrypted);
}
// 解密函数
function decrypt($data, $key) {
$data = base64_decode($data);
$iv = substr($data, 0, openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = substr($data, openssl_cipher_iv_length('aes-256-cbc'));
return openssl_decrypt($encrypted, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
}
// 使用示例
$data = 'Hello, world!';
$key = 'my_secret_key';
$encrypted_data = encrypt($data, $key);
echo "加密后的数据:$encrypted_data\n";
$decrypted_data = decrypt($encrypted_data, $key);
echo "解密后的数据:$decrypted_data\n";
非对称加密算法使用一对密钥进行加密和解密,其中一个是公钥,用于加密数据,另一个是私钥,用于解密数据。常用的非对称加密算法有RSA、DSA等。
以下是使用RSA算法对数据进行加密和解密的示例代码:
php
// 生成密钥对
$key_pair = openssl_pkey_new(array(
'private_key_bits' => 2048,
'private_key_type' => OPENSSL_KEYTYPE_RSA
));
openssl_pkey_export($key_pair, $private_key);
$public_key = openssl_pkey_get_details($key_pair)['key'];
// 加密函数
function encrypt($data, $public_key) {
openssl_public_encrypt($data, $encrypted, $public_key);
return base64_encode($encrypted);
}
// 解密函数
function decrypt($data, $private_key) {
$data = base64_decode($data);
openssl_private_decrypt($data, $decrypted, $private_key);
return $decrypted;
}
// 使用示例
$data = 'Hello, world!';
$encrypted_data = encrypt($data, $public_key);
echo "加密后的数据:$encrypted_data\n";
$decrypted_data = decrypt($encrypted_data, $private_key);
echo "解密后的数据:$decrypted_data\n";
需要注意的是,使用非对称加密算法加密数据的速度较慢,一般用于加密较小的数据或者用于数据签名。