学习笔记---PHP中几种加密算法(MD5,shal,base64_encode等) - 近未来 - CSDN博客

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的加密 :<br/>".$a." 字符长度长度为".$a_len;
echo  "<br/>使用md5方式,参数为false的加密: <br/>".$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  "<br/>使用crypt方式加密 :<br/>".$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  "<br/>使用sha1方式加密 :<br/>".$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  "<br/>使用urlencode方式加密 :<br/>".$e." 字符长度长度为".$e_len."<br/>";

$ee = urldecode($e);
$ee_len = strlen($ee);
echo "<br/>待解密字符串:".$e;
echo  "<br/>使用urldecode方式解密 :<br/>".$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  "<br/>使用base64_encode方式加密 :<br/>".$f." 字符长度长度为".$f_len."<br/>";

$ff = base64_decode($f);
$ff_len = strlen($ff);
echo "<br/>待解密字符串:".$f;
echo  "<br/>使用base64_decode方式解密 :<br/>".$ff." 字符长度长度为".$ff_len;

网页结果:
这里写图片描述

这里待加密的字符串和上面用urlencode加密的字符串是一样的,但明显看到加密结果不同。
    • *

以上是php中常用的一些加密方法,正在学习,所以稍作整理,方便阅读与理解。


Original url: Access
Created at: 2019-05-16 15:26:56
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论