10个PHP函数实现数据加密与解密
PHP是一种在Web开发中被广泛使用的服务器端脚本语言。它支持加密和解密数据的各种函数,这些函数可以在处理敏感数据时保护用户的隐私和安全。本文将介绍10个PHP函数,这些函数可以帮助您加密和解密数据。
1. md5() - MD5哈希加密
md5()函数在PHP中非常常见。它计算字符串的MD5哈希值,并返回一个32个字符的十六进制数字。这个哈希值可以用作密码的安全验证。
例子:
原始数据:Hello World
加密后的数据:ed076287532e86365e841e92bfc50d8c
代码:
<?php
$str = "Hello World";
echo md5($str);
?>
2. base64_encode() 和 base64_decode() - Base64编码解码
base64_encode()将一个字符串转换为Base64编码,而base64_decode()则将Base64编码的字符串解码为原始字符串。
例子:
原始数据:Hello World
加密后的数据:SGVsbG8gV29ybGQ=
解密后的数据:Hello World
代码:
<?php
$str = "Hello World";
$str_encrypted = base64_encode($str);
echo $str_encrypted;
$str_decrypted = base64_decode($str_encrypted);
echo $str_decrypted;
?>
3. openssl_encrypt() 和 openssl_decrypt() - OpenSSL加密解密
openssl_encrypt()和openssl_decrypt()是使用OpenSSL加密算法加密和解密数据的函数。可以使用不同的加密算法,如AES,DES和RC4等。
例子:
原始数据:Hello World
加密后的数据:4WWgZsD5pd00svDwKbNzgvG6unZEUJlI5+WLaC4tbXo=
解密后的数据:Hello World
代码:
<?php
$str = "Hello World";
$key = "mysecretkey";
$iv = "myiv";
$ciphertext = openssl_encrypt($str, "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv);
echo base64_encode($ciphertext);
$plaintext = openssl_decrypt($ciphertext, "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv);
echo $plaintext;
?>
4. mcrypt_encrypt() 和 mcrypt_decrypt() - Mcrypt加密解密
mcrypt_encrypt()和mcrypt_decrypt()函数使用Mcrypt加密算法加密和解密数据。可以使用不同的加密算法,如AES,Blowfish和DES等。
例子:
原始数据:Hello World
加密后的数据:8iFmeCfUf+zQdaNRSKPCrQ==
解密后的数据:Hello World
代码:
<?php
$str = "Hello World";
$key = "mysecretkey";
$iv = "myiv";
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
$plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_CBC, $iv);
echo $plaintext;
?>
5. crypt() - 单向加密
crypt()函数使用Unix风格的单向加密算法来加密字符串。
例子:
原始数据:Hello World
加密后的数据:$1$CHSf9VXk$W385dKRbTPkUlvX9K70WZ1
代码:
<?php
$str = "Hello World";
$salt = '$1$CHSf9VXk$';
$ciphertext = crypt($str, $salt);
echo $ciphertext;
?>
6. hash() - 哈希加密
hash()函数允许您选择不同的哈希函数,例如SHA-1,SHA-256等,以加密字符串。它返回一个十六进制数字的哈希值。
例子:
原始数据:Hello World
加密后的数据:f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0
代码:
<?php
$str = "Hello World";
$ciphertext = hash('sha1', $str);
echo $ciphertext;
?>
7. sodium_crypto_secretbox() 和 sodium_crypto_secretbox_open() - Sodium加密解密
sodium_crypto_secretbox() 和 sodium_crypto_secretbox_open() 函数使用Sodium库中的Salsa20加密算法加密和解密数据,提供强大的安全性和抗攻击性。
例子:
原始数据:Hello World
加密后的数据:fGQvwH4SL0MhWfVvSWk+MX4D2/bDKxWKW0RvKKzTH1k=
解密后的数据:Hello World
代码:
<?php
$str = "Hello World";
$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox($str, $nonce, $key);
echo base64_encode($ciphertext);
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
echo $plaintext;
?>
8. sodium_crypto_box() 和 sodium_crypto_box_open() - 公钥加密解密
sodium_crypto_box() 和 sodium_crypto_box_open() 函数使用Sodium库中的加密算法在使用一个公钥和一个私钥的情况下加密和解密数据。
例子:
原始数据:Hello World
加密后的数据:n4RgpkXVGLKsn/eey+Kgb+rK3UEd3cKjSI1nVnH9P3+I5arJyddWKsWbqFKy93duUWb+I3J1
解密后的数据:Hello World
代码:
<?php
$str = "Hello World";
$alice_keypair = sodium_crypto_box_keypair();
$bob_keypair = sodium_crypto_box_keypair();
$ciphertext = sodium_crypto_box($str, $nonce, $bob_keypair['publickey'], $alice_keypair['secretkey']);
echo base64_encode($ciphertext);
$plaintext = sodium_crypto_box_open($ciphertext, $nonce, $alice_keypair['publickey'], $bob_keypair['secretkey']);
echo $plaintext;
?>
9. sodium_crypto_pwhash() - 密码哈希
sodium_crypto_pwhash()函数使用Argon2加密算法从密码生成安全加密哈希值。
例子:
原始数据:mypassword
加密后的数据:$argon2id$v=19$m=65536,t=5,p=1$Qk9FVzZXMlE2d2w3eTZ4Qg$v8vtv69VbbhwmO5VfaBwGpOtqKdbg08KfTPKf86fF0Y
代码:
<?php
$password = "mypassword";
$hash = sodium_crypto_pwhash_str($password, SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE);
echo $hash;
?>
10. sodium_crypto_sign() 和 sodium_crypto_sign_open() - 签名与验证
sodium_crypto_sign() 和 sodium_crypto_sign_open() 函数使用Sodium库中的Ed25519签名算法签名和验证数据。
例子:
原始数据:Hello World
加密后的数据:QEHoqpeLcV66mbVgSPxoSlLaIxIW389x5sAcrDEAj8dLF3G6THX+P9Z8/lwVjUVV6NBw+iRj8HoP/QeEDSuABQ==
代码:
<?php
$str = "Hello World";
$keypair = sodium_crypto_sign_keypair();
$signature = sodium_crypto_sign($str, $keypair['secretkey']);
$valid = sodium_crypto_sign_open($signature, $keypair['publickey']);
if ($valid) {
echo "Valid signature";
} else {
echo "Invalid signature";
}
?>
总结:
PHP提供了许多安全的加密和解密函数。根据应用需求,在选择加密算法和加密函数时应考虑安全性和性能
