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

「PHP加密与解密函数全解析」

发布时间:2023-06-17 05:12:12

在Web开发中,安全性是一个很重要的问题。其中之一就是保护敏感信息的安全,如用户名,密码等。为了保证这些信息不被恶意的人盗取或者篡改,我们通常会采用加密和解密的技术来保护它们的安全。而PHP作为一种非常流行的Web开发语言,它自然也提供了许多加密和解密的函数来帮助我们实现这个目标。本文将对它们进行全解析。

一、加密函数

1. md5()

md5()函数是PHP中最常用的加密函数之一,它将一个字符串进行加密后返回一个32位的MD5哈希值。它的语法如下:

md5(string $str[, bool $raw_output = false]): string

其中$str参数表示需要加密的字符串,$raw_output参数表示是否返回原始输出(默认为false,表示返回16位的MD5加密结果)。下面是一个例子:

<?php

$str = "Hello World";

$result = md5($str);

echo $result;

?>

执行结果:

b10a8db164e0754105b7a99be72e3fe5

2. sha1()

sha1()函数与md5()函数类似,也是将一个字符串进行加密后返回一个40位的SHA1哈希值。它的语法如下:

sha1(string $str[, bool $raw_output = false]): string

其中$str参数表示需要加密的字符串,$raw_output参数表示是否返回原始输出(默认为false,表示返回40位的SHA1加密结果)。下面是一个例子:

<?php

$str = "Hello World";

$result = sha1($str);

echo $result;

?>

执行结果:

0a4d55a8d778e5022fab701977c5d840bbc486d0

3. password_hash()

password_hash()函数是PHP 5.5之后引入的新加密函数。它使用Bcrypt算法将一个字符串进行加密后返回一个带有salt的哈希值(每次结果会不同),这使得密码非常难以破解。它的语法如下:

password_hash(string $password, int $algo[, array $options = array()]): string|false

其中$password参数表示需要加密的密码明文,$algo参数表示加密算法(常用的有PASSWORD_DEFAULT和PASSWORD_BCRYPT),$options参数表示算法选项。下面是一个例子:

<?php

$password = "123456";

$options = [

    'cost' => 11,

];

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

echo $result;

?>

执行结果:

$2y$11$5PQs5p.YZ/BXeUhJhjI9DuD0H1zJLirZPKqctNLWSXP1fDw.rv1nS

二、解密函数

由于加密函数是不可逆的,所以不可能有一个解密函数可以完全还原加密前的数据。但是有些加密函数却可以通过破解的方式得到原始数据。这种情况下,我们需要使用PHP的解密函数。

1. password_verify()

password_verify()函数用于验证密码的正确性。它将一个密码明文和一个加密后的哈希值进行比较,如果匹配则返回true,否则返回false。它的语法如下:

password_verify(string $password, string $hash): bool

其中$password参数表示需要验证的密码明文,$hash参数表示已经加密的哈希值。下面是一个例子:

<?php

$password = "123456";

$hash = "$2y$11$5PQs5p.YZ/BXeUhJhjI9DuD0H1zJLirZPKqctNLWSXP1fDw.rv1nS";

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

    echo "Password matches";

} else {

    echo "Password does not match";

}

?>

执行结果:

Password matches

三、其他函数

1. base64_encode()和base64_decode()

base64_encode()和base64_decode()函数用于将二进制数据转换为可读的ASCII码。base64_encode()函数将一个二进制字符串进行加密后返回一个字符串,base64_decode()函数将一个base64加密的字符串进行解密后返回一个原始字符串。它们的语法如下:

base64_encode(string $str): string

base64_decode(string $str): string

下面是一个例子:

<?php

$str = "Hello World";

$result = base64_encode($str);

echo $result;

echo base64_decode($result);

?>

执行结果:

SGVsbG8gV29ybGQ=

Hello World

2. openssl_encrypt()和openssl_decrypt()

openssl_encrypt()和openssl_decrypt()函数用于进行对称加密和解密。它们使用公开的密钥对数据进行加密和解密。它们的语法如下:

openssl_encrypt(string $data, string $method, string $key[, int $options = 0[, string $iv = ""[, string &$tag = NULL]]]): string|false

openssl_decrypt(string $data, string $method, string $key[, int $options = 0[, string $iv = ""[, string $tag = NULL]]]): string|false

其中$data参数表示需要加密或者解密的数据,$method参数表示加密算法(常用的有aes-128-cbc、aes-128-gcm、aes-256-cbc、aes-256-gcm等),$key参数表示密钥,$options参数表示算法选项,$iv参数表示初始化向量,$tag参数表示数据校验码。下面是一个例子:

<?php

$data = "Hello World";

$key = "abcdefg";

$method = "aes-128-cbc";

$options = 0;

$iv = "1234567890123456";

$result = openssl_encrypt($data, $method, $key, $options, $iv);

echo $result;

echo openssl_decrypt($result, $method, $key, $options, $iv);

?>

执行结果:

JsKeX9X2ize3zlU60k+QlQ==

Hello World

以上就是PHP中常用的加密和解密函数的详细解析。在web开发中,选择合适的加密函数非常重要,需要根据项目的实际情况进行选择。同时,我们也需要注意加密和解密的性能问题,避免影响系统的性能。