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

PHP函数-加密函数:md5、sha1、password_hash等

发布时间:2023-06-12 08:47:51

在web开发中,数据的安全性是一个非常重要的问题。为了保护用户的数据,一些加密算法被应用在网络传输和数据存储中。在PHP中,有一些内置的加密函数可以帮助我们保护数据的安全性。

一、md5

md5是一个广泛应用的加密算法,可以将任意长度的字符串转换为一个128位的16进制字符串。PHP提供了md5函数,用于加密字符串。

示例:

$str = 'Hello, world!';

$md5str = md5($str);

echo '原始字符串: '.$str.'<br/>';

echo '加密字符串: '.$md5str.'<br/>';

输出: 

原始字符串: Hello, world!

加密字符串: 65a8e27d8879283831b664bd8b7f0ad4

md5函数的缺点是它不是一个非常强的加密算法,因为它的加密过程不能进行反向还原。

二、sha1

sha1是另一个广泛应用的加密算法,它可以将任意长度的字符串转换为一个40位的16进制字符串。PHP提供了sha1函数,用于加密字符串。

示例:

$str = 'Hello, world!';

$sha1str = sha1($str);

echo '原始字符串: '.$str.'<br/>';

echo '加密字符串: '.$sha1str.'<br/>';

输出:

原始字符串: Hello, world!

加密字符串: 2ef7bde608ce5404e97d5f042f95f89f1c232871

sha1函数比md5函数更加安全,但是仍然不足够安全。

三、password_hash

password_hash函数是PHP5.5中新增的加密函数,用于密码加密。它可以生成一个在未来不可被破解的salt值,并生成bcrypt加密的password hash。password_hash函数的返回值是一个字符串,包含密码哈希值和salt。

示例:

$password = 'mypassword';

$options = array('cost' => 12);

$hash = password_hash($password, PASSWORD_BCRYPT, $options);

echo '哈希: '.$hash;

输出:

哈希: $2y$12$5nXuYtwO050pEAZxA6XJAO2wDcRxuaRQbMnPUV3sYkWgrLvsd7Tq.

$options数组中的cost参数定义了bcrypt算法的工作因子。cost值越大,加密算法越慢,因此更加安全。

四、password_verify

password_verify函数是用于验证password hash的函数。它接收明文密码和password hash,并返回true或false。

示例:

$hash = '$2y$12$5nXuYtwO050pEAZxA6XJAO2wDcRxuaRQbMnPUV3sYkWgrLvsd7Tq.';

$password = 'mypassword';

if (password_verify($password, $hash)) {

    echo '密码正确!';

} else {

    echo '密码错误!';

}

输出:

密码正确!

五、openssl_encrypt和openssl_decrypt

openssl_encrypt和openssl_decrypt函数可以用来进行对称加密和解密。对称加密是一种速度快,适合加密大量数据的加密方法。

示例:

$key = 'mykey';

$data = 'mydata';

//加密

$encrypted = openssl_encrypt($data, 'AES-128-CBC', $key);

//解密

$decrypted = openssl_decrypt($encrypted, 'AES-128-CBC', $key);

echo '原始数据: '.$data.'<br/>';

echo '加密后的数据: '.$encrypted.'<br/>';

echo '解密后的数据: '.$decrypted.'<br/>';

输出:

原始数据: mydata

加密后的数据: alFZ1fx8z/Upl5zZsvJynw==

解密后的数据: mydata

openssl_encrypt和openssl_decrypt函数接收三个参数:需要加密/解密的数据,加密算法,密钥。

综上所述,PHP提供了多种加密算法和函数,用于保障web开发中数据的安全性。在处理数据时,需要根据具体需求选择恰当的加密方法及函数。