PHP加密解密函数汇总及用法
在PHP中,加密解密是常见的操作。一些敏感信息,例如密码、信用卡号、银行卡号等,都需要加密存储,保证安全性。在这篇文章中,我们将会汇总一些常见的PHP加密解密函数及用法。
一、MD5加密
MD5是最简单的加密算法之一,它可以把任意长度的信息压缩成一个128位(16字节)的信息摘要。在PHP中,我们可以使用md5()函数进行加密。它有一个参数,即待加密的字符串,返回的结果是一个32位的十六进制数。例如:
$password = "123456"; $md5_password = md5($password); echo $md5_password;
输出结果为:e10adc3949ba59abbe56e057f20f883e
MD5是一个单向加密算法,无法通过密文反推出原文。因此,它常被用作密码加密。
二、SHA1加密
SHA1是一种安全散列算法,它将任意长度的信息压缩成160位(20字节)长度的信息摘要。在PHP中,我们可以使用sha1()函数进行加密。它有一个参数,即待加密的字符串,返回的结果是一个40位的十六进制数。例如:
$password = "123456"; $sha1_password = sha1($password); echo $sha1_password;
输出结果为:7c4a8d09ca3762af61e59520943dc26494f8941b
同样地,SHA1也是一个单向加密算法,常用于密码加密。
三、加盐加密
简单的MD5或SHA1加密虽然可以抵挡一部分的攻击,但仍然存在被撞库攻击的风险。为了增强安全性,我们可以加入“盐”值进行加密。盐值是指一段随机字符串,它被加入原文进行运算,从而生成密文。在PHP中,我们可以通过以下步骤进行加盐加密:
1.生成一个随机字符串,例如:
$salt = "kCqXwTLZ";
2.将原文和盐值拼接成一个字符串,例如:
$password = "123456"; $salt_password = $password.$salt;
3.使用MD5或SHA1算法进行加密,例如:
$md5_salt_password = md5($salt_password); $sha1_salt_password = sha1($salt_password);
这样,攻击者就需要知道盐值才能进行撞库破解。
四、Base64编码
Base64是一种基于64个可打印字符来表示二进制数据的编码方式,常用于电子邮件的传输。它可以将二进制数据转换为ASCII字符,方便传输。在PHP中,我们可以使用base64_encode()函数进行编码,使用base64_decode()函数进行解码。例如:
$str = "Hello World!"; $base64_str = base64_encode($str); echo $base64_str;
输出结果为:SGVsbG8gV29ybGQh
$origin_str = base64_decode($base64_str); echo $origin_str;
输出结果为:Hello World!
五、AES加密
AES是一种对称密钥加密算法,它使用一个密钥来进行加密和解密。在PHP中,我们可以使用openssl_encrypt()函数进行加密,使用openssl_decrypt()函数进行解密。例如:
$str = "Hello World!"; $key = "1234567890123456"; $iv = "1234567890123456"; //初始化向量 $aes_str = openssl_encrypt($str, "AES-128-CBC", $key, OPENSSL_ZERO_PADDING, $iv); echo $aes_str;
输出结果为:xYJ/hf2f+ExCgPh+2jEz3A==
$origin_str = openssl_decrypt($aes_str, "AES-128-CBC", $key, OPENSSL_ZERO_PADDING, $iv); echo $origin_str;
输出结果为:Hello World!
需要注意的是,在使用openssl_encrypt()函数进行加密时,我们需要指定加密算法(例如“AES-128-CBC”),密钥和初始化向量。而且,为避免对结果的影响,我们需指定“OPENSSL_ZERO_PADDING”为填充模式。
六、RSA加密
RSA是一种非对称加密算法,它使用一个公钥和一个私钥分别进行加密和解密。在PHP中,我们可以使用openssl_public_encrypt()函数进行加密,使用openssl_private_decrypt()函数进行解密。例如:
$str = "Hello World!";
$public_key = file_get_contents("./public_key.pem");
openssl_public_encrypt($str, $encrypted, $public_key);
echo base64_encode($encrypted);
输出结果为:UQmTg5R/DdR5RrN50WgYzW9Cbh28yHZB4D1CInzAOs0ZNYTb3VN6jFBUfswT2QjJVC0eq394F4tcGu3C4gv9qA==
$private_key = file_get_contents("./private_key.pem");
openssl_private_decrypt(base64_decode($encrypted), $origin_str, $private_key);
echo $origin_str;
输出结果为:Hello World!
需要注意的是,在使用openssl_public_encrypt()函数进行加密时,我们需要指定加密算法。此外,为了减小密钥的长度,我们通常会采用一个大于等于待加密字符串长度的RSA密钥对,然后截取其中的一段作为公钥和私钥。例如,我们可以使用以下命令生成一个1024字节的RSA密钥对,并将公钥保存到public_key.pem文件中,私钥保存到private_key.pem文件中:
openssl genrsa -out rsa_private_key.pem 1024 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
到此,我们就汇总了一些常见的PHP加密解密函数及用法,如有不足之处,欢迎指出并补充。
