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

加密解密技巧:10个PHP加密函数

发布时间:2023-06-15 17:37:08

PHP是一门广泛使用的编程语言,广泛应用于Web开发,其中包括加密和解密数据。在这篇文章中,我们将重点介绍10个PHP加密函数,以及它们如何使用和实现。

1. md5()函数

md5()函数用于将输入字符串处理为128位的MD5哈希值。它的语法如下:

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

其中,$str是需要加密的字符串;$raw_output参数为可选参数,如果为true,则返回16位二进制格式的MD5值。

下面是示例代码:

$original_string = "Hello, world!";

$encrypted_string = md5($original_string);

echo $encrypted_string;

输出将是:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

请注意,md5()函数是单向加密方式,不能用于解密。

2. sha1()函数

sha1()函数用于将输入字符串处理为40位的SHA1哈希值。它的语法如下:

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

其中,$str是需要加密的字符串;$raw_output参数为可选参数,如果为true,则返回20位二进制格式的SHA1值。

下面是示例代码:

$original_string = "Hello, world!";

$encrypted_string = sha1($original_string);

echo $encrypted_string;

输出将是:943a702d06f34599aee1f8da8ef9f7296031d699

请注意,sha1()函数是单向加密方式,不能用于解密。

3. password_hash()函数

password_hash()函数用于将输入字符串处理为加盐的哈希值。它的语法如下:

string password_hash ( string $password , int $algo [, array $options ] )

其中,$password是需要加密的字符串;$algo是使用的算法,例如PASSWORD_DEFAULT(默认算法),PASSWORD_BCRYPT等,可以查看PHP文档以获得完整列表;$options参数是可选参数,用于指定其他设置,例如加盐的长度和复杂度等。

下面是示例代码:

$original_string = "Hello, world!";

$encrypted_string = password_hash($original_string, PASSWORD_DEFAULT);

echo $encrypted_string;

输出将是类似于以下内容(每次运行将生成不同的哈希值):

$2y$10$23zjVd8/1fy6IO2TtGLd3exCCgpXchjNWPfHLs.fV6prtvKfNzK1K

请注意,password_hash()函数的输出包括用于加盐的随机字符串,这意味着无法使用固定值进行测试。

4. password_verify()函数

password_verify()函数用于验证使用password_hash()函数加密的字符串与给定的原始字符串是否匹配。它的语法如下:

bool password_verify ( string $password , string $hash )

其中,$password是需要验证的字符串;$hash是使用password_hash()函数生成的哈希值。

下面是示例代码:

$original_string = "Hello, world!";

$encrypted_string = password_hash($original_string, PASSWORD_DEFAULT);

$matched = password_verify($original_string, $encrypted_string);

echo $matched;

输出将是:1,表示成功匹配。

请注意,password_verify()函数只返回true或false,无法确定原始字符串明确匹配或不匹配的原因。

5. mcrypt_encrypt()函数

mcrypt_encrypt()函数用于将输入字符串使用指定的加密算法和密钥进行加密。它的语法如下:

string mcrypt_encrypt ( string $cipher , string $key , string $data , string $mode [, string $iv ] )

其中,$cipher是使用的加密算法;$key是用于加密的密钥字符串;$data是需要加密的字符串;$mode是加密模式,例如CBC、ECB等;$iv(初始化向量)是可选参数,用于增加加密的随机性。

下面是示例代码:

$original_string = "Hello, world!";

$encrypted_string = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, "secret_key", $original_string, MCRYPT_MODE_CBC, "init_vector");

echo $encrypted_string;

输出将是类似于以下内容:

??S??E $1k9'?$?

请注意,mcrypt_encrypt()函数的输出是二进制格式的,可能需要使用base64_encode()函数将其转换为文本格式。

6. mcrypt_decrypt()函数

mcrypt_decrypt()函数用于解密使用mcrypt_encrypt()函数加密的字符串。它的语法如下:

string mcrypt_decrypt ( string $cipher , string $key , string $data , string $mode [, string $iv ] )

其中,$cipher是使用的加密算法;$key是用于加密的密钥字符串;$data是需要解密的字符串;$mode是加密模式,例如CBC、ECB等;$iv(初始化向量)是可选参数,用于增加加密的随机性。

下面是示例代码:

$original_string = "Hello, world!";

$encrypted_string = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, "secret_key", $original_string, MCRYPT_MODE_CBC, "init_vector");

$decrypted_string = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, "secret_key", $encrypted_string, MCRYPT_MODE_CBC, "init_vector");

echo $decrypted_string;

输出将是原始字符串:"Hello, world!"。

请注意,mcrypt_decrypt()函数的输出可能包含填充字符,需要进行处理以去除填充。

7. openssl_encrypt()函数

openssl_encrypt()函数用于将输入字符串使用指定的加密算法和密钥进行加密。它的语法如下:

string openssl_encrypt ( string $data , string $method , string $key [, int $options = 0 [, string $iv [, string $tag [, string $aad ]]]] )

其中,$data是需要加密的字符串;$method是使用的加密算法,例如AES-128-CBC、AES-256-CBC等;$key是用于加密的密钥字符串;$options参数是可选参数,用于指定其他设置,例如填充方式、随机化等;$iv(初始化向量)是可选参数,用于增加加密的随机性;$tag是可选参数,用于添加验证标记;$aad是可选参数,用于添加验证相关的数据。

下面是示例代码:

$original_string = "Hello, world!";

$encrypted_string = openssl_encrypt($original_string, "AES-128-CBC", "secret_key", 0, "init_vector");

echo $encrypted_string;

输出将是类似于以下内容:

?jㄩ????qZ?"7?,?c?

请注意,openssl_encrypt()函数的输出是二进制格式的,可能需要使用base64_encode()函数将其转换为文本格式。

8. openssl_decrypt()函数

openssl_decrypt()函数用于解密使用openssl_encrypt()函数加密的字符串。它的语法如下:

string openssl_decrypt ( string $data , string $method , string $key [, int $options = 0 [, string $iv [, string $tag [, string $aad ]]]] )

其中,$data是需要解密的字符串;$method是使用的加密算法,例如AES-128-CBC、AES-256-CBC等;$key是用于加密的密钥字符串;$options参数是可选参数,用于指定其他设置,例如填充方式、随机化等;$iv(初始化向量)是可选参数,用于增加加密的随机性;$tag是可选参数,用于添加验证标记;$aad是可选参数,用于添加验证相关的数据。

下面是示例代码:

$original_string = "Hello, world!";

$encrypted_string = openssl_encrypt($original_string, "AES-128-CBC", "secret_key", 0, "init_vector");

$decrypted_string = openssl_decrypt($encrypted_string, "AES-128-CBC", "secret_key", 0, "init_vector");

echo $decrypted_string;

输出将是原始字符串:"Hello, world!"。

请注意,openssl_decrypt()函数的输出可能包含填充