在PHP语言里, 加密的操作方式主要有那四种常用的办法。除了刚才提到的这几个方法以外, 还有一种跟网址链接相关的加密处理以及解密的方式是另外一种存在的情况。我希望这段文字内容对于你们正在进行的软件开发工作能够提供一点实际的帮助作用和使用价值参考。
另外, 我把之后整理出来的一整套关于CSS3、PHP和MYSQL开发的笔记都打包好了, 会放到百度云盘里, 谁要是需要的话可以直接去那个地盘上下载, 这样往后你们在做开发的时候, 就可以随时翻看这份笔记, 就不必再去百度上面辛辛苦苦地搜索那么多东西了。
笔记的链接在哪里呢? 还有那个密码, 它是pvj2。
一、md5()加密技术
语法:
md5( $str
布尔值设为假, 具体数值等于零。
):计算str的md5散列值
$str:原始字符串
若将可选参数设定为true, 那么md5报文摘要将会以长度为16字节的原始二进制格式进行返回。同时, 散列值将以32位字符的十六进制数字形式予以返回。
请注意, md5算法本身的性质决定了它是一个不可逆的过程, 因此严格来说不存在所谓的强制直接解码, 只能借助其他手段。
其核心含义是: 数据在完成加密处理之后, 无法通过任何内置函数反向推导出原始的密码明文, 而唯一可行的途径, 是依赖第三方的匹配数据库, 利用32位长度的字符组合进行比对分析, 从而解析出对应的原始字符内容。
对相关的网站予以解密处理。
实例:
<!--?php</p-->header("content-type:text/html;charset='utf8'"); //设置编码
echo md5("dfa");//1b014086a5cf92eb3238d0d45c8c61a4
echo "
";
echo md5("dfa",$raw_output=true); //输出: @��ϒ�28��\�a�5oWV6K++572RLWtpbg==
$str=1;
echo md5(md5($str)); //可以进行多次加密
if($str){
echo "注册成功,3秒钟后跳转到登录页面";
echo ""; //3秒后就刷新一次页面,然后跳转到login.html
}else{
echo "注册失败,请重新注册";
echo "";
}
?>
二、crypt加密算法
语法:
crypt( $str
这个部分, 以及$salt。
);
它会返回一个散列字符串, 这个散列字符串是基于标准UNIX DES算法生成的, 或者是基于该系统中其他可以使用的替代算法来生成的。
$str:需要机密的明文
$salt:加密时的干扰串, 使编码更安全。
注意:
在执行加密操作的时候, 假如根本就没有添上这个名为$salt的参数, 系统就会去随机生产一个用来干扰的字符串。如果已经添加了该参数, 刷新加密程序之后, 生成的加密密文依然保持不变。
实例:
<!--?php</p-->echo crypt("imooc");
echo "
";
echo crypt("imooc",'cq');//可以在生成的32位UNIX文前加th两个字符
echo "
";
if(CRYPT_STD_DES){
echo "DES标准算法:".crypt("leohengchun","this is test");
}
echo "
";
if(CRYPT_MD5){
echo "MD5加密:".crypt("leohengchun",'$1$cdsaf$'); //一定要写成$1$...
}
echo "
";
if(CRYPT_MD5){
echo "MD5加密:".crypt("leochun",'$1$xshowsd dfds$');
}
?>
三、sha1()加密算法
语法:
sha1( $str
布尔值设为假, 具体数值等于零。
对当前的这个字符串进行相关的运算, 目的是求得它的sha1散列值。
需要加密的字符串。
如果可选的参数被设定为TRUE, sha一的这个摘要就会以长度是20个字符的原始格式返回。如果不被设定为True, 那么返回值就是一串长度为40个字符的十六进制数字。
返回的值为字符串,其内容是经过计算之后所得到的sha1散列值。
实例:
<!--?php</p-->echo sha1("leohc");
echo "
";
echo sha1("leohc",true); //加了ture 生成的是:n��7�_#B���[�BѰ�9j
echo "
";
echo sha1("admin");
echo "
";
echo sha1(md5("admin",true));
?>
四、URL编码加密技术
1.( $str):编码URL字符串
$str:要编码的字符串
返回结果是一个字符串, 这个字符串是经过编码处理以后得到的。
2.( $str):解码已编码的URL字符串。
$str:要解码的字符串
返回值, 指的是将字符串解码之后所返回的那一坨结果。
在编码这个规定里面, 凡是看到有不属于字母、也不属于数字的字符, 还得是连字符、下划线、句号或者是横杠这三个以外的东西, 都要把它换掉, 换的方法是用一个百分号, 再跟上两个用十六进制写出来的数字。如果是空格的话, 就简单地把它变成加号好了。
3.( $str):按照对URL进行编码
$str:要编码的URL
返回的内容是一个字符串, 其中的空格会被替换成百分之二零的编码形式。
4.对于那个用括号和钱符号加上str括起来的变量, 它的作用是将那些已经被编码过的网址字符串进行还原。
你要解码的那个网页地址, 需要把这串字符当成输入参数。
返回值是字符串, 在这个字符串里面, 所有跟着两位十六进制序列的百分号百分号的部分, 都会被替换成原义字符。
实例:
<!--?php</p-->/*
原码 转换编码
? %3F
= %3D
空格 +
% %25
& %26
\ %5C
*/
$str="h e l lo world";
echo urlencode($str);
echo "
";
$str="urlencode.php?username=1+3%4&imooc&king#or1=1\ ";
echo urlencode($str);
echo "
";
$urlencode=urlencode($str);
echo urldecode($urlencode); //用来解码
echo "
";
if(!empty($_GET)){
print_r($_GET);
}
echo 'hello';
echo "
";
$username="imooc&king";
$queryString="username=".urlencode($username)."&age=2";
echo "test";
echo "
";
echo urldecode("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=site888_3_pg&wd=%E7%99%BE%E5%BA%A6%E4%BA%91&oq=crypt&rsv_pq=fac4a3dc0002be07&rsv_t=16d5wj9i3VPccyU6g9qIm86QNweuVYvCtNwPZ8u27y%2BEOCmwYlgt7irSlH5hePjE8Ug5&rsv_enter=1&rsv_sug3=10&rsv_sug1=3&rsv_sug7=100&sug=%E7%99%BE%E5%BA%A6%E4%BA%91&rsv_n=1&bs=crypt");
echo "
";
echo urlencode("墨客我"); //%E5%A2%A8%E5%AE%A2%E6%88%91
echo "
";
echo urlencode("this is a test");//this+is+a+test
echo "
";
echo rawurlencode("this is test");//this%20is%20test
echo "
";
echo rawurlencode("this%20is%20a%20test");//this%2520is%2520a%2520test
echo "
";
echo rawurldecode("this+is+a+test");//this+is+a+test
echo "
";
echo urldecode("this+is+a+test");//this is a test
?>
五、把信息编成编码, 并且用上加密的技术手段。
1.( $data):使用对data进行编码
数据, $data: 是需要被执行编码处理的操作对象。
2.( $data
布尔值设为假, 具体数值等于零。
对于使用了MIME这种方式来编码数据的, 进行解这样的码的处理。
如果现在拿到的这一些输入数据, 它实际上已经超出了规定的字母表范围了, 那就请直接返回一个false值。
实例:
<!--?php</p-->$data="慕课网-kin";
echo base64_encode($data);
echo "
";
echo base64_decode("5oWV6K++572RLWtpbg==");
echo "
";
//图片的加密和转化
echo base64_encode("
");//加密
echo base64_decode("PGltZyBzcmM9J3VybC5wbmcnPg==");//解码
$filename="url.png";//加密
$data = file_get_contents($filename);
echo base64_encode($data);//加密 可以生成一串ascii码
echo "
";
?>
六、我们对信息加密技术进行了分类, 并且把相关情况都总结了出来。
信息加密:
1.单项散列加密
关于单项散列加密技术, 我们在这里做一个简单的介绍。
单向散列加密, 它是指通过去对长度不一样的输入信息来进行那个散列的运算, 来得到一个长度的固定的输出结果。并且这个散列运算的过程是单方向的。也就是说是不能去拿那个固定长度的输出去进行反算从而能得到原有的输入信息的。
salt
明文首先是要被送进去的, 然后呢, 它要通过单向散列算法这个环节的, 最后才到密文的。
2.对称散列加密
对称加密技术介绍:
所谓的对成加密, 指的是这样一种情况, 也就是说在进行数据加密的时候使用的密钥, 以及在进行数据解密的时候使用的密钥, 它们是同一个密钥, 或者是可以通过彼此互相推算出来的。
salt 密钥
↓↓
明文数据会进入加密算法的处理流程, 从而转换成密文形态, 随后密文数据需要被传递到解密算法中进行处理, 以此重新恢复出初始的明文内容。
3.就是那种加密办法, 叫做非对称散列加密。
非对称加密, 还有它的解密环节, 这两个事儿用不着是同一个密钥。其中一个密钥是可以对外头公布的, 这个被称为公钥, 另一个就只有一手所有者心里清楚。
加密密钥, 解密密钥。
↓↓
明文数据会进入加密算法的处理流程, 从而转换成密文形态, 随后密文数据需要被传递到解密算法中进行处理, 以此重新恢复出初始的明文内容。
希望这些内容可以在开发的过程当中起到一定的帮助作用。