加密解密技巧:10个PHP加密函数
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()函数的输出可能包含填充
