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

PHP中的加密函数及用法介绍

发布时间:2023-06-11 04:14:16

在Web开发中,加密是非常重要的一环,用来保护用户数据和敏感信息,例如密码和银行账户等等。PHP提供了一系列的加密函数来保护Web应用程序中的数据,下面将会介绍几个PHP中常用的加密函数及其用法。

1. md5()

md5()函数是PHP中最常用的加密函数之一,它用于计算输入字符串的MD5散列值。该函数返回一个32个字符的字符串,可以用于存储密码的散列值,但需要注意的是,md5()生成的散列值可以被暴力破解,因此建议将其与其他加密函数一起使用。

使用方法:

$pass = '123456';
$hash = md5($pass);
echo $hash; // 输出:e10adc3949ba59abbe56e057f20f883e

2. sha1()

sha1()函数也是常用的加密函数之一,它用于计算输入字符串的SHA-1散列值。与md5()类似,sha1()也返回一个40个字符的字符串,但同样可以被暴力破解。

使用方法:

$pass = '123456';
$hash = sha1($pass);
echo $hash; // 输出:7c4a8d09ca3762af61e59520943dc26494f8941b

3. password_hash()

password_hash()函数是PHP 5.5中新增的加密函数,它提供了一种更加安全的密码加密方式。该函数使用的是bcrypt算法,可以生成安全的密码散列值。与md5()和sha1()不同的是,password_hash()函数每次生成的散列值都是不同的,这是因为它使用了随机生成的盐来加密密码。

使用方法:

$pass = '123456';
$hash = password_hash($pass, PASSWORD_DEFAULT);
echo $hash;

4. password_verify()

password_verify()函数与password_hash()函数配合使用,用于校验密码是否与散列值匹配。该函数使用相同的算法和盐来检查给定的密码是否与它对应的散列值匹配。如果匹配,则返回true,否则返回false。

使用方法:

假设$hash是通过password_hash()函数得到的散列值,$pass是用户输入的密码,可以使用下面的代码来进行验证:

if (password_verify($pass, $hash)) {
    // 密码验证成功
} else {
    // 密码验证失败
}

5. openssl_encrypt()

openssl_encrypt()函数是PHP中使用OpenSSL扩展加密数据的函数。该函数可以使用多种加密算法来加密数据,并且可以指定加密模式和填充模式。加密结果为二进制数据,可以通过base64_encode()来进行编码。

使用方法:

$data = 'hello world';
$key = 'mykey';
$method = 'AES-256-CBC';
$ivlen = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($ivlen);
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
$encrypted = base64_encode($iv . $encrypted);
echo $encrypted;

6. openssl_decrypt()

openssl_decrypt()函数用于解密经过openssl_encrypt()加密的数据。该函数需要提供加密算法、加密密钥、初始化向量以及填充模式等参数。

使用方法:

$encrypted = '.....'; // 经过openssl_encrypt()加密的数据
$key = 'mykey';
$method = 'AES-256-CBC';
$ivlen = openssl_cipher_iv_length($method);
$encrypted = base64_decode($encrypted);
$iv = substr($encrypted, 0, $ivlen);
$encrypted = substr($encrypted, $ivlen);
$data = openssl_decrypt($encrypted, $method, $key, OPENSSL_RAW_DATA, $iv);
echo $data;

总结

以上是PHP中常用的几个加密函数,它们各有优点和缺点。在实际开发中,要根据实际情况选择适合的加密方案。同时,需要注意加密过程中要保护好密钥,避免密钥被泄露。