PHP中加密解密函数大全
在PHP中,加密和解密函数是至关重要的功能之一。PHP中有许多加密和解密函数,它们用于确保数据的安全性并保护用户信息免受不良分子的侵害。在本文中,我们将讨论PHP中一些最常用的加密和解密函数。
一、散列函数(Hash Functions)
散列函数,也称哈希函数,是将任意大小的数据映射到固定大小的散列值(哈希值)的函数。这种函数具有两个主要特征:首先,输入散列函数的任何数据都必须具有相同的哈希值长度;其次,散列函数将输入数据转换为输出哈希值的一种算法。以下是PHP中一些最常用的散列函数:
1.md5()
md5()函数将任何字符串转换为32位的散列值。它是一种不可逆的加密算法,适用于比较短的字符串,如密码。下面是md5()函数的基本语法:
string md5 (string $str [, bool $raw_output = FALSE])
其中,$str是要加密的字符串,$raw_output是一个可选参数,如果设置为TRUE,则返回16位二进制散列值,否则返回32位的十六进制字符串。示例如下:
$str = 'hello world'; echo md5($str); //5eb63bbbe01eeed093cb22bb8f5acdc3
2.sha1()
sha1()函数是另一种常见的散列函数,它将任何字符串转换为40位的散列值。它比md5()更安全,但速度稍慢。下面是sha1()函数的基本语法:
string sha1 (string $str [, bool $raw_output = FALSE])
其中,$str是要加密的字符串,$raw_output是一个可选参数,如果设置为TRUE,则返回20位二进制散列值,否则返回40位的十六进制字符串。示例如下:
$str = 'hello world'; echo sha1($str); //2ef7bde608ce5404e97d5f042f95f89f1c232871
二、对称密钥加密算法(Symmetric Key Encryption)
对称密钥加密算法的基本思想是用相同的密钥加密和解密数据。因此,只有掌握密钥的人才能解密数据。以下是PHP中一些最常用的对称密钥加密函数:
1.mcrypt_encrypt()
mcrypt_encrypt()函数是一种高级加密标准(AES)算法,通常用于加密和解密数据。它使用相同的密钥加密和解密数据。以下是mcrypt_encrypt()函数的基本语法:
string mcrypt_encrypt (string $cipher, string $key, string $data, string $mode [, string $iv])
其中,$cipher是要使用的加密算法,$key是加密密钥,$data是要加密的数据,$mode是加密模式,$iv是一个可选的初始化向量。示例如下:
$data = 'hello world'; $key = 'this is a secret key'; $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($cipher), MCRYPT_RAND); mcrypt_generic_init($cipher, $key, $iv); $encrypted_data = mcrypt_generic($cipher, $data); mcrypt_generic_deinit($cipher); mcrypt_module_close($cipher); echo base64_encode($encrypted_data); //9UEc95ouVIk6Ckl1JvVn4A==
2.mcrypt_decrypt()
mcrypt_decrypt()函数与mcrypt_encrypt()函数配对使用,用于解密数据。以下是mcrypt_decrypt()函数的基本语法:
string mcrypt_decrypt (string $cipher, string $key, string $data, string $mode [, string $iv])
其中,$cipher是用于解密的加密算法,$key是解密密钥,$data是要解密的数据,$mode是解密模式,$iv是一个可选的初始化向量。示例如下:
$encrypted_data = base64_decode('9UEc95ouVIk6Ckl1JvVn4A==');
$key = 'this is a secret key';
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($cipher), MCRYPT_RAND);
mcrypt_generic_init($cipher, $key, $iv);
$decrypted_data = mdecrypt_generic($cipher, $encrypted_data);
mcrypt_generic_deinit($cipher);
mcrypt_module_close($cipher);
echo trim($decrypted_data); //hello world
三、非对称密钥加密算法(Asymmetric Key Encryption)
非对称密钥加密算法与对称密钥加密算法不同,它使用两个密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。以下是PHP中一些最常用的非对称密钥加密函数:
1.openssl_public_encrypt()
openssl_public_encrypt()函数使用公钥加密数据,然后使用相应的私钥解密数据。以下是openssl_public_encrypt()函数的基本语法:
bool openssl_public_encrypt (string $data, string &$encrypted_data, mixed $public_key [, int $padding = OPENSSL_PKCS1_PADDING])
其中,$data是要加密的数据,$encrypted_data是加密后的数据,$public_key是公钥,$padding是可选的加密填充方式。示例如下:
$data = 'hello world';
$public_key = openssl_pkey_get_public(file_get_contents('public.key'));
openssl_public_encrypt($data, $encrypted_data, $public_key);
echo base64_encode($encrypted_data); //efCHhC76Eqaxz8vqAJCmSiOaFxXWd26w66Fb6y3xrV4N4q1Yl3M+DJvNKoV4KBWnrWx0bmU5If8p/MjuwM63/w==
2.openssl_private_decrypt()
openssl_private_decrypt()函数与openssl_public_encrypt()函数配对使用,用于解密使用公钥加密的数据。以下是openssl_private_decrypt()函数的基本语法:
bool openssl_private_decrypt (string $encrypted_data, string &$decrypted_data, mixed $private_key [, int $padding = OPENSSL_PKCS1_PADDING])
其中,$encrypted_data是加密后的数据,$decrypted_data是解密后的数据,$private_key是私钥,$padding是可选的解密填充方式。示例如下:
$encrypted_data = base64_decode('efCHhC76Eqaxz8vqAJCmSiOaFxXWd26w66Fb6y3xrV4N4q1Yl3M+DJvNKoV4KBWnrWx0bmU5If8p/MjuwM63/w==');
$private_key = openssl_pkey_get_private(file_get_contents('private.key'));
openssl_private_decrypt($encrypted_data, $decrypted_data, $private_key);
echo trim($decrypted_data); //hello world
四、哈希密码(Hashed Password)
哈希密码是一种用于存储用户密码的加密技术。与传统的明文密码存储方式不同,哈希密码将明文密码转换为其散列值,然后将散列值存储在数据库中。以下是PHP中一些最常用的哈希密码函数:
1.password_hash()
password_hash()函数将明文密码转换为安全的哈希密码。它使用bcrypt算法,根据需要自动加盐,并在哈希计算中使用适当的哈希技术。以下是password_hash()函数的基本语法:
`php
string password_hash (string $password, int $algorithm
