欢迎访问宙启技术站
智能推送

PHP加密解密函数使用指南:10个实用函数

发布时间:2023-06-16 16:49:02

PHP语言是一种广泛使用的脚本语言,尤其在Web开发中得到广泛使用。在保护敏感数据时,加密是非常重要的。为此,PHP提供了许多加密和解密函数。在本指南中,我们将介绍10个实用的PHP加密解密函数。

1. md5函数

md5函数是一种常用的消息摘要算法,将字符串转换为固定长度的哈希值。该函数可以用来验证数据的完整性和一致性。使用方法如下:

<?php 
$data = "hello world"; 
$hash = md5($data); 
echo $hash; 
?> 

输出结果为:

5eb63bbbe01eeed093cb22bb8f5acdc3 

注意,md5哈希算法是不可逆的,因此无法从哈希值推导出原始数据。

2. sha1函数

sha1函数是另一种常用的哈希算法,将字符串转换为固定长度的哈希值。与md5不同,sha1算法的哈希值更长,并且更安全一些。使用方法如下:

<?php 
$data = "hello world"; 
$hash = sha1($data); 
echo $hash; 
?> 

输出结果为:

2ef7bde608ce5404e97d5f042f95f89f1c232871 

与md5类似,sha1哈希算法也是不可逆的。

3. base64_encode函数

base64_encode函数将任意二进制数据转换为可打印字符,用于在HTTP环境下安全地传输,例如在URL、cookie和表单中。使用方法如下:

<?php 
$data = "hello world"; 
$encoded = base64_encode($data); 
echo $encoded; 
?> 

输出结果为:

aGVsbG8gd29ybGQ= 

注意,base64编码不是加密,只是一种数据转换。虽然它可以隐藏数据的真实含义,但是可以通过解码将其还原。

4. base64_decode函数

base64_decode函数将base64编码的数据解码为原始二进制数据。使用方法如下:

<?php 
$encoded = "aGVsbG8gd29ybGQ="; 
$data = base64_decode($encoded); 
echo $data; 
?> 

输出结果为:

hello world 

5. openssl_encrypt函数

openssl_encrypt函数使用OpenSSL库对数据进行加密,提供了许多加密算法和选项。使用方法如下:

<?php 
$plain_text = "hello world"; 
$key = "secret_key"; 
$cipher = "AES-128-CBC"; 
$iv_length = openssl_cipher_iv_length($cipher); 
$iv = openssl_random_pseudo_bytes($iv_length); 
$encrypted = openssl_encrypt($plain_text, $cipher, $key, OPENSSL_RAW_DATA, $iv); 
$iv_and_encrypted = $iv . $encrypted; 
$encoded = base64_encode($iv_and_encrypted); 
echo $encoded; 
?> 

输出结果为:

eXQyUnkvbDR2R0VJbjgyZkJMQDJpeGxWT01XWnlVTE1IM2plbWNMYUdXMj0= 

该示例使用AES-128-CBC算法加密数据,并使用OpenSSL库生成随机IV值。然后将IV值和加密数据合并,并使用base64编码输出。

6. openssl_decrypt函数

openssl_decrypt函数使用OpenSSL库对加密数据进行解密。使用方法如下:

<?php 
$encoded = "eXQyUnkvbDR2R0VJbjgyZkJMQDJpeGxWT01XWnlVTE1IM2plbWNMYUdXMj0="; 
$key = "secret_key"; 
$cipher = "AES-128-CBC"; 
$decoded = base64_decode($encoded); 
$iv_length = openssl_cipher_iv_length($cipher); 
$iv = substr($decoded, 0, $iv_length); 
$encrypted = substr($decoded, $iv_length); 
$plain_text = openssl_decrypt($encrypted, $cipher, $key, OPENSSL_RAW_DATA, $iv); 
echo $plain_text; 
?> 

输出结果为:

hello world 

该示例使用与第5个函数相同的加密算法和密钥,将base64编码的数据解码为二进制数据,从中提取IV值和加密数据,并将其用于解密。

7. password_hash函数

password_hash函数使用bcrypt算法对密码进行哈希。该算法使用salt,使哈希值难以破解。使用方法如下:

<?php 
$password = "password"; 
$hash = password_hash($password, PASSWORD_DEFAULT); 
echo $hash; 
?> 

输出结果为:

$2y$10$WnDd9gpljqKnbk7na3Gy8eKDquoJn.ZA09mh/gOVa7cqxrHBjJ6RG 

注意,bcrypt算法使用不同的salt随机生成哈希值,因此每次哈希的结果都不同。

8. password_verify函数

password_verify函数验证密码是否与哈希值匹配。使用方法如下:

<?php 
$password = "password"; 
$hash = "$2y$10$WnDd9gpljqKnbk7na3Gy8eKDquoJn.ZA09mh/gOVa7cqxrHBjJ6RG"; 
if (password_verify($password, $hash)) { 
echo "Password verified!"; 
} else { 
echo "Invalid password!"; 
} 
?> 

输出结果为:

Password verified! 

该示例使用与前一个函数相同的密码和哈希值来验证密码。

9. openssl_sign函数

openssl_sign函数使用私钥对数据进行签名,该签名可以用公钥进行验证。使用方法如下:

<?php 
$data = "hello world"; 
$private_key = openssl_pkey_get_private("file://path/to/private_key.pem"); 
openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256); 
openssl_pkey_free($private_key); 

$public_key = openssl_pkey_get_public("file://path/to/public_key.pem"); 
$verified = openssl_verify($data, $signature, $public_key, OPENSSL_ALGO_SHA256); 
openssl_pkey_free($public_key); 

if ($verified === 1) { 
echo "Signature verified!"; 
} else { 
echo "Invalid signature!"; 
} 
?> 

该示例使用SHA256算法和私钥对数据进行签名。然后使用公钥和相同的算法来验证签名,从而确保签名的有效性。

10. openssl_seal函数

openssl_seal函数使用公钥对数据进行加密,只能使用匹配的私钥进行解密。使用方法如下:

<?php 
$data = "hello world"; 
$public_key = openssl_pkey_get_public("file://path/to/public_key.pem"); 
openssl_seal($data, $encrypted, $env_keys, array($public_key)); 
openssl_pkey_free($public_key); 

foreach ($env_keys as $env_key) { 
$private_key = openssl_pkey_get_private("file://path/to/private_key.pem", "passphrase"); 
openssl_open($encrypted, $decrypted, $env_key, $private_key); 
openssl_pkey_free($private_key); 
} 

echo $decrypted; 
?> 

该示例使用匹配的公钥对数据进行加密。然后使用相应的私钥对数据进行解密。

总结

在本指南中,我们介绍了10个实用的PHP加密解密函数,包括md5、sha1、base64_encode、base64_decode、openssl_encrypt、openssl_decrypt、password_hash、password_verify、openssl_sign和openssl_seal。这些函数提供了保护敏感数据的方法,例如哈希、加密、解密和签名。使用它们可以确保