📅  最后修改于: 2023-12-03 14:50:24.129000             🧑  作者: Mango
在实际开发中,经常需要对用户的敏感信息进行加密存储(如密码),或者对数据进行加密传输(如支付信息)。本文将介绍 PHP 中常见的几种加密解密方式。
单向加密(也称为哈希算法)使用一个函数将数据转换成一段固定长度的无法还原的字符串,主要用于验证数据的完整性,如用户密码。其中,MD5 是最为常见的一种单向加密方式。
// 加密
$password = 'password';
$encrypted_password = md5($password);
echo $encrypted_password;
// 输出:5f4dcc3b5aa765d61d8327deb882cf99
对称加密使用同一个密钥进行加密和解密,常用于对数据进行保密性加密,如支付信息。其中,AES 是最为常用的一种对称加密方式。
// 加密
$data = 'data to be encrypted';
$key = 'encryption key';
$encrypted_data = openssl_encrypt($data, 'AES-256-ECB', $key);
echo $encrypted_data;
// 输出:K4Y4L7cOa1ykIR0KAgBU0Q==
// 解密
$decrypted_data = openssl_decrypt($encrypted_data, 'AES-256-ECB', $key);
echo $decrypted_data;
// 输出:data to be encrypted
非对称加密使用一对公钥和私钥进行加密和解密,公钥可以公开,私钥必须保密,常用于数字签名、加密通信等场景。其中,RSA 是最为常用的一种非对称加密方式。
// 生成密钥对
$config = array(
'digest_alg' => 'sha512',
'private_key_bits' => 2048,
'private_key_type' => OPENSSL_KEYTYPE_RSA,
);
$resource = openssl_pkey_new($config);
openssl_pkey_export($resource, $private_key);
$public_key = openssl_pkey_get_details($resource)['key'];
// 加密
$data = 'data to be encrypted';
openssl_public_encrypt($data, $encrypted_data, $public_key);
echo base64_encode($encrypted_data);
// 输出:MTg5MmNmYjA2YzYzYTljZmUxNzUxOTI5MjZlMjhmZDA5MTk1NTdkZjU3ZWQ5Mzc1NTAyNTlkMzgzMjIwZjFmMw==
// 解密
openssl_private_decrypt(base64_decode($encrypted_data), $decrypted_data, $private_key);
echo $decrypted_data;
// 输出:data to be encrypted