PHP内置加密函数详解
本文将对PHP内置的加密函数进行详细的讲解,包括常用的hash算法、加密方式以及其使用方法。
常用hash算法
md5
md5是一种广泛使用的hash算法。它将任意长度的消息压缩到一个128位的hash值,通常用于数据完整性校验、数字签名等。
// 使用md5计算字符串的hash值
$str = 'Hello World';
$hash = md5($str);
echo $hash; // 输出:b10a8db164e0754105b7a99be72e3fe5
// 使用md5计算文件的hash值
$file = 'test.txt';
$hash = md5_file($file);
echo $hash; // 输出:d41d8cd98f00b204e9800998ecf8427e
sha1
sha1是一种与md5类似的hash算法,将任意长度的输入消息压缩成160位的hash值。sha1算法比md5更加安全,但也更加耗费资源。
// 使用sha1计算字符串的hash值
$str = 'Hello World';
$hash = sha1($str);
echo $hash; // 输出:0a4d55a8d778e5022fab701977c5d840bbc486d0
// 使用sha1计算文件的hash值
$file = 'test.txt';
$hash = sha1_file($file);
echo $hash; // 输出:da39a3ee5e6b4b0d3255bfef95601890afd80709
hash
hash是一个通用的hash函数,支持多种算法,包括md5、sha1、sha256、sha512等。具体使用哪种算法可以通过第一个参数进行指定。
// 使用md5计算字符串的hash值
$str = 'Hello World';
$hash = hash('md5', $str);
echo $hash; // 输出:b10a8db164e0754105b7a99be72e3fe5
// 使用sha1计算字符串的hash值
$hash = hash('sha1', $str);
echo $hash; // 输出:0a4d55a8d778e5022fab701977c5d840bbc486d0
常用加密方式
base64_encode
base64_encode是一种将二进制数据(如图片、文件等)转换成可打印字符的编码方式,常用于数据传输时的编码和解码。
// base64编码字符串
$str = 'Hello World';
$encoded_str = base64_encode($str);
echo $encoded_str; // 输出:SGVsbG8gV29ybGQ=
// base64解码字符串
$decoded_str = base64_decode($encoded_str);
echo $decoded_str; // 输出:Hello World
password_hash
password_hash是PHP5.5引入的一种密码加密函数,采用bcrypt算法进行加密,用于存储安全性要求较高的用户密码。它自动产生盐值,并将密码和盐值混合运算产生hash值存储。
// 使用password_hash加密密码
$password = 'mypassword';
$hash = password_hash($password, PASSWORD_DEFAULT);
echo $hash; // 输出:$2y$10$p44C02T84DZj9mFYD1QTxuaRhE1RYMlZLKmFs/w2Y8fN.BGNRLzLe
// 使用password_verify验证密码
$verify = password_verify($password, $hash);
echo $verify; // 输出:1
示例说明
示例一
假设我们需要对一个密码进行加密,并将加密后的密码存储到数据库中。可以使用password_hash函数对密码进行加密,然后将加密后的字符串存储到数据库中。
$password = 'mypassword';
$hash = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (username, password) VALUES ('user1', '$hash')";
当用户需要登录时,将用户输入的密码和从数据库中获取的加密密码进行比对,可以使用password_verify函数进行验证。
$username = 'user1';
$password = 'mypassword';
$sql = "SELECT password FROM users WHERE username='$username'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$hash = $row['password'];
if (password_verify($password, $hash)) {
// 验证通过
} else {
// 验证失败
}
示例二
假设我们需要对用户上传的图片进行base64编码,并将编码后的字符串存储到数据库中。可以使用base64_encode函数对图片进行编码,然后将编码后的字符串存储到数据库中。
$image = file_get_contents('test.png');
$encoded_image = base64_encode($image);
$sql = "INSERT INTO images (title, image_data) VALUES ('test', '$encoded_image')";
当需要从数据库中获取图片数据时,可以使用base64_decode函数将编码后的字符串还原成图片数据。
$sql = "SELECT image_data FROM images WHERE title='test'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
$encoded_image = $row['image_data'];
$image = base64_decode($encoded_image);
file_put_contents('test.png', $image);
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP内置加密函数详解 - Python技术站