PHP中有多种加密算法。
1.md5()—–不可逆,无解密算法
md5(string $str[,bool $raw_output = false|true]);
参数:
$str:待加密的字符串
$raw_output:可选参数为true或false,两者区别是:
true加密后密文为16位二进制格式字符;
false加密后密文为32位十六进制格式字符。若此处没有参数,则默认为false方式。
eg:
$num = "1234567adc89";
$a = md5($num,true);
$b = md5($num);
$a_len = strlen($a);
$b_len = strlen($b);
echo "使用md5方式,参数为true的加密 :
".$a." 字符长度长度为".$a_len;
echo "
使用md5方式,参数为false的加密:
".$b." 字符长度长度为".$b_len;
页面显示结果为:
2. crypt()—不可逆,无解密算法
crypt(string $str, string [salt]);
crypt() 返回一个基于标准 UNIX DES 算法或系统上其他可用的替代算法的散列字符串。
参数:
$str:待加密字符串。
salt:可选的盐值字符串。如果没有提供,算法行为将由不同的算法实现决定,并可能导致不可预料的结束。
eg:
$num = "1234567adc89";
$c = crypt($num);
$c_len = strlen($c);
echo "
使用crypt方式加密 :
".$c." 字符长度长度为".$c_len;
页面执行结果:
每次页面刷新后,加密后的字符都会发生变化。
这个算法的散列值有多个,用法、含义也很大不同。因为是初学阶段,用处也不多,所以就不去深究啦。在网上看见一篇博文解释得更详细,大家有兴趣了解更改可以戳戳哦php基于crypt的加密实例
3.sha1()—不可逆,无解密算法
string sha1 (string $str [, bool $raw_output = false ] )
参数:
$str:待加密字符串
$raw_output: 可选参数是true|fasle。
true:加密后密文为 20 位字符长度。
flase:加密后密文是 40 位字符长度的十六进制字符串,若此处未设置参数,则默认false。
eg:
$num = "1234567adc89";
$d = sha1($num);
$d_len = strlen($d);
echo "
使用sha1方式加密 :
".$d." 字符长度长度为".$d_len;
页面执行结果:
以上几种虽然是不可逆加密,但是也可以根据查字典的方式去解密。请戳在线解密查看解密哦。
上面的都是不可逆加密算法,下面几个将是可逆加密算法。一般成对出现。
4.URL加/解密—可逆加密算法
string urlencode ( string $str ) //用于加密
string urldecode ( string $encoded_str ) //用于解密
只有一个参数,即待加/解密的字符串。
urlencode()函数用于将字符串以URL编码,同时它还便于将变量传递给下一页。
原理是将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
urldecode()函数则是将字符串以URL解码。
eg:
$num = "未来1997Lilian你好";
$e = urlencode($num);
$e_len = strlen($e);
echo "
使用urlencode方式加密 :
".$e." 字符长度长度为".$e_len."
";
$ee = urldecode($e);
$ee_len = strlen($ee);
echo "
待解密字符串:".$e;
echo "
使用urldecode方式解密 :
".$ee." 字符长度长度为".$ee_len;
网页结果显示:
可以看到,在密文中,数字和字母并没有被加密。
因为urlencode()适用于统一资源标识符(URI)的编码,也用于为"application/x-www-form-urlencoded" MIME准备数据, 因为它用于通过HTTP的请求操作(request)提交HTML表单数据。
5.base64_ 加/解密—可逆加密算法
string base64_encode ( string $data ) //用于加密
string base64_decode ( string $encoded_data [, bool $strict = false ] ) //用于解密
base64_encode()使用 base64 对 data 进行编码。设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。
Base64-encoded 数据要比原始数据多占用 33% 左右的空间
base64_decode()
参数
$encoded_data : 编码过的数据。
strict : 如果输入的数据超出了 base64 字母表,则返回 FALSE对 encoded_data 进行解码,返回原始数据,失败则返回 FALSE。返回的数据可能是二进制的。
eg:
$num = "未来1997Lilian你好";
$f = base64_encode($num);
$f_len = strlen($f);
echo "
使用base64_encode方式加密 :
".$f." 字符长度长度为".$f_len."
";
$ff = base64_decode($f);
$ff_len = strlen($ff);
echo "
待解密字符串:".$f;
echo "
使用base64_decode方式解密 :
".$ff." 字符长度长度为".$ff_len;
网页结果:
这里待加密的字符串和上面用urlencode加密的字符串是一样的,但明显看到加密结果不同。
以上是php中常用的一些加密方法,正在学习,所以稍作整理,方便阅读与理解。