PHP加密函数:用PHP函数进行加密和解密操作;
在Web开发中,对于敏感信息一般需要进行加密传输或者存储。PHP是一种非常常用的Web开发语言,在PHP中,提供了大量的加密函数,方便开发者进行数据加密操作,同时也提供了对应的解密函数,方便开发者进行解密操作。下面我们来看一些PHP加密函数的使用方法和示例。
一、哈希函数
哈希函数是将任意长度的消息(明文)压缩成固定长度的消息摘要(密文)的函数,通常用于防篡改和数字签名。常用的哈希函数包括MD5、SHA1、SHA224、SHA256、SHA384、SHA512等。
1. MD5:使用md5() 函数进行加密,使用 hash_equals() 函数进行比较。
示例:
//加密
$plaintext = '密码';
$hash = md5($plaintext);
echo $hash;
//比较
$userInput = '密码';
if(hash_equals(md5($userInput), $hash)){
echo '密码正确';
}
2. SHA1:使用sha1() 函数进行加密,使用 hash_equals() 函数进行比较。
示例:
//加密
$plaintext = '密码';
$hash = sha1($plaintext);
echo $hash;
//比较
$userInput = '密码';
if(hash_equals(sha1($userInput), $hash)){
echo '密码正确';
}
二、对称加密函数
对称加密算法是加密和解密使用相同密钥的加密算法,常用的对称加密算法有DES、3DES、AES等。在PHP中,提供了mcrypt_encrypt() 和 mcrypt_decrypt() 函数完成对称加密和解密。
1. 3DES加密:使用mcrypt_encrypt() 函数进行加密,使用 mcrypt_decrypt() 函数进行解密。
示例:
//加密
$plaintext = '密码';
$key = '123456789012345678901234';
$iv = "12345678";
$ciphertext = mcrypt_encrypt(MCRYPT_TRIPLEDES, $key, $plaintext, MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
//解密
$ciphertext = base64_decode($ciphertext);
$plaintext = mcrypt_decrypt(MCRYPT_TRIPLEDES, $key, $ciphertext, MCRYPT_MODE_CBC, $iv);
echo $plaintext;
2. AES加密:使用mcrypt_encrypt() 函数进行加密,使用 mcrypt_decrypt() 函数进行解密。
示例:
//加密
$plaintext = '密码';
$key = '1234567890123456';
$iv = "1234567890123456";
$method = 'aes-128-cbc';
$ciphertext = mcrypt_encrypt($method, $key, $plaintext, MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
//解密
$ciphertext = base64_decode($ciphertext);
$plaintext = mcrypt_decrypt($method, $key, $ciphertext, MCRYPT_MODE_CBC, $iv);
echo $plaintext;
三、非对称加密函数
非对称加密算法使用一对密钥,分为公钥和私钥,其中公钥用于加密,私钥用于解密。常用的非对称加密算法有RSA、DSA等。在PHP中,提供了openssl_public_encrypt() 和 openssl_private_decrypt() 函数完成非对称加密和解密。
1. RSA加密:使用openssl_public_encrypt() 函数进行加密,使用 openssl_private_decrypt() 函数进行解密。
示例:
//加密
$plaintext = '密码';
$fp = fopen(dirname(__FILE__).'/public.key', 'r');
$pub_key = fread($fp, 65536);
fclose($fp);
$encrypted = '';
openssl_public_encrypt($plaintext, $encrypted, $pub_key);
echo base64_encode($encrypted);
//解密
$fp = fopen(dirname(__FILE__).'/private.key', 'r');
$priv_key = fread($fp, 65536);
fclose($fp);
$decrypted = '';
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $priv_key);
echo $decrypted;
2. DSA签名:使用openssl_sign() 函数进行签名,使用 openssl_verify() 函数进行验证。
示例:
//签名
$plaintext = '密码';
$fp = fopen(dirname(__FILE__).'/private.key', 'r');
$priv_key = fread($fp, 65536);
fclose($fp);
$signature = '';
openssl_sign($plaintext, $signature, $priv_key, OPENSSL_ALGO_DSS1);
echo base64_encode($signature);
//验证
$fp = fopen(dirname(__FILE__).'/public.key', 'r');
$pub_key = fread($fp, 65536);
fclose($fp);
if(openssl_verify($plaintext, base64_decode($signature), $pub_key, OPENSSL_ALGO_DSS1)){
echo '验签成功!';
}else{
echo '验签失败!';
}
以上是PHP中常用的加密函数的使用方法和示例,需要根据实际需求进行选择和配置。在Web开发中,数据加密是非常重要的,尤其是涉及到用户隐私信息的时候,安全问题必须得到重视,开发者应该根据具体情况进行加密方案的选择和完善,以保证用户信息安全。
