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

10个PHP加密和解密函数,可保护您的数据和隐私

发布时间:2023-06-20 18:35:28

在现代计算机应用程序中,加密和解密数据是非常常见的操作。尤其是在Web应用程序的环境中,很多时候我们需要对敏感数据进行保护。PHP语言作为一种 Web 开发语言,也提供了许多加密和解密函数供我们使用。

在这篇文章中,我们将介绍10个PHP加密和解密函数,它们能够帮助您保护数据和隐私。这些函数都是PHP内置的,所以您无需安装任何额外的组件或插件。

1. base64_encode() 和 base64_decode()

base64_encode() 函数将字符串编码为base64字符串,而base64_decode() 函数将base64字符串解码为字符串。这两个函数都是PHP内置函数。base64编码并不是加密,但它可以将内容转换为一种可读性较低的形式。

例如,下面的代码将一个字符串进行base64编码,并输出结果:

$str = "Hello World";  
$encoded_str = base64_encode($str);  
echo $encoded_str;  // 输出 "SGVsbG8gV29ybGQ="

下面的代码将一个base64字符串解码回原来的字符串:

$encoded_str = "SGVsbG8gV29ybGQ=";  
$str = base64_decode($encoded_str);  
echo $str;  // 输出 "Hello World"

2. md5() 和 sha1()

md5()和sha1()函数都是常见的哈希函数。它们都接受一个字符串作为输入,并返回一个固定长度的哈希值。这些函数可以用于加密密码或其他敏感数据。

例如,下面的代码将一个字符串使用md5哈希:

$str = "Hello World";  
$hash = md5($str);  
echo $hash;  // 输出 "b10a8db164e0754105b7a99be72e3fe5"

下面的代码将一个字符串使用sha1哈希:

$str = "Hello World";  
$hash = sha1($str);  
echo $hash;  // 输出 "0a4d55a8d778e5022fab701977c5d840bbc486d0"

3. openssl_encrypt() 和 openssl_decrypt()

openssl_encrypt()和openssl_decrypt()函数是PHP提供的开放SSL加密函数。这些函数可以用于加密和解密数据。需要注意的是,这些函数需要OpenSSL扩展的支持。

例如,下面的代码使用AES-128-CBC模式加密字符串:

$str = "Hello World";  
$key = "my_secret_key";  
$iv = "my_secret_iv";  
$encrypted_str = openssl_encrypt($str, "AES-128-CBC", $key, 0, $iv);  
echo $encrypted_str;  // 输出 "iM54lqdqsyuZN9e4SobZ2w=="

下面的代码将一个加密后的字符串使用AES-128-CBC模式解密:

$encrypted_str = "iM54lqdqsyuZN9e4SobZ2w==";  
$key = "my_secret_key";  
$iv = "my_secret_iv";  
$str = openssl_decrypt($encrypted_str, "AES-128-CBC", $key, 0, $iv);  
echo $str;  // 输出 "Hello World"

4. password_hash() 和 password_verify()

password_hash()和password_verify()函数是PHP提供的安全密码哈希函数。这些函数可以用于以更安全的方式存储和比较密码。

例如,下面的代码使用Bcrypt算法生成一个哈希,并存储在数据库中:

$password = "my_password";  
$hash = password_hash($password, PASSWORD_BCRYPT);  
// 将 $hash 存储在数据库中

下面的代码比较数据库中存储的哈希和用户输入的密码:

$password = "my_password";  
$hash = "my_hash_stored_in_database";  
if (password_verify($password, $hash)) {  
    echo "密码正确";  
} else {  
    echo "密码错误";  
}

5. openssl_pkcs7_encrypt() 和 openssl_pkcs7_decrypt()

openssl_pkcs7_encrypt()和openssl_pkcs7_decrypt()函数是PHP提供的OpenSSL PKCS7加密和解密函数。这些函数可以用于保护敏感数据。

例如,下面的代码使用PKCS7加密算法对字符串进行加密:

$str = "Hello World";  
$key = "my_secret_key";  
$iv = "my_secret_iv";  
$cipher = "aes-128-cbc";  
$encrypted_str = openssl_pkcs7_encrypt($str, $cipher, $key, $options, $iv);  
echo $encrypted_str;  // 输出加密后的字符串

下面的代码将加密后的字符串使用PKCS7解密算法解密:

$encrypted_str = "my_encrypted_string";  
$key = "my_secret_key";  
$iv = "my_secret_iv";  
$cipher = "aes-128-cbc";  
$decrypted_str = openssl_pkcs7_decrypt($encrypted_str, $cipher, $key, $options, $iv);  
echo $decrypted_str;  // 输出解密后的字符串

6. sodium_crypto_secretbox() 和 sodium_crypto_secretbox_open()

sodium_crypto_secretbox()和sodium_crypto_secretbox_open()函数是PHP 7以上版本中提供的加密和解密函数。这些函数使用NaCL库来提供强大的加密和解密功能。

例如,下面的代码使用Salsa20加密算法加密一个字符串:

$str = "Hello World";  
$key = sodium_crypto_secretbox_keygen();  
$nonce = randombytes_buf(24);  // 随机生成一个 24 字节nonce  
$encrypted_str = sodium_crypto_secretbox($str, $nonce, $key);  
echo $encrypted_str;  // 输出加密后的字符串

下面的代码使用Salsa20加密算法解密一个加密后的字符串:

$encrypted_str = "my_encrypted_string";  
$key = $my_secret_key;  
$nonce = "my_nonce";  
$decrypted_str = sodium_crypto_secretbox_open($encrypted_str, $nonce, $key);  
echo $decrypted_str;  // 输出解密后的字符串

7. sodium_crypto_pwhash_str() 和 sodium_crypto_pwhash_str_verify()

sodium_crypto_pwhash_str()和sodium_crypto_pwhash_str_verify()函数是PHP 7以上版本中提供的安全密码哈希函数。这些函数可以用于存储和比较密码。

例如,下面的代码使用Argon2i算法生成一个哈希:

$password = "my_password";  
$hash = sodium_crypto_pwhash_str($password, SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE);  
// 将 $hash 存储在数据库中

下面的代码比较数据库中存储的哈希和用户输入的密码:

$password = "my_password";  
$hash = "my_hash_stored_in_database";  
if (sodium_crypto_pwhash_str_verify($hash, $password)) {  
    echo "密码正确";  
} else {  
    echo "密码错误";  
}

8. mcrypt_encrypt() 和 mcrypt_decrypt()

mcrypt_encrypt()和mcrypt_decrypt()函数是PHP 7以下版本中提供的加密和解密函数。这些函数可以用于加密和解密数据。

例如,下面的代码使用AES-128-CBC模式加密一个字符串:

$str = "Hello World";  
$key = "my_secret_key";  
$iv = "my_secret_iv";  
$encrypted_str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC, $iv);  
echo $encrypted_str;  // 输出加密后的字符串

下面的代码使用AES-128-CBC模式解密一个加密后的字符串:

`

$encrypted_str = "my_encrypted_string";

$key = "my_secret_key";

$iv = "my_secret_iv";

$decrypted_str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted_str, MCRYPT_MODE_CBC, $iv);

echo $decrypted