PHP的几个常用加密函数


Posted in PHP onFebruary 03, 2016

MD5加密:

string md5 ( string $str [, bool $raw_output = false ] )

1.md5()默认情况下以 32 字符十六进制数字形式返回散列值,它接受两个参数,第一个为要加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,md5()则会返回原始的 16 位二进制格式报文摘要

2.md5()为单向加密,没有逆向解密算法,但是还是可以对一些常见的字符串通过收集,枚举,碰撞等方法破解

<?php
$username='jellybool';
$password='jellybool.com';
/*简单地对字符串进行md5加密*/
echo md5($username);
echo "<hr>";
echo md5($password);
echo "<hr>";
/*更推荐的做法是对重要的敏感数据进行多次加密,以防被轻易破解*/
echo md5(md5($password));

/*以上输出:
  username:4f5436e5d72608fb647b691e8edcf42e
  password:7bf02cf0f4af6da4accbc73d2a175476
  password(两次加密):864704bb35754f8cd0232cba6b91521b
*/

Crypt加密:

string crypt ( string $str [, string $salt ] )

1.crypt()接受两个参数,第一个为需要加密的字符串,第二个为盐值(就是加密干扰值,如果没有提供,则默认由PHP自动生成);返回散列后的字符串或一个少于 13 字符的字符串,后者为了区别盐值。
2.crypt()为单向加密,跟md5一样。

<?php
$password='jellybool.com';
echo crypt($password);
//输出:$1$Fe0.qr5.$WOhkI4/5VPo7n7TnXHh5K
/*第二个$与第三个$之间的八个字符是由PHP生成的,每刷新一次就变一次
*/
echo "<hr>";
echo crypt($password,"jellybool");
//输出:je7fNiu1KNaEs
/*当我们要加自定义的盐值时,如例子中的jellybool作为第二个参数直接加入,
超出两位字符的会截取前两位*/
echo "<hr>";
echo crypt($password,'$1$jellybool$');
//输出:$1$jellyboo$DxH7wF7SygRpWb6XBBgfH/
/* crypt加密函数有多种盐值加密支持,以上例子展示的是MD5散列作为盐值,该方式下
盐值以$1$$的形式加入,如例子中的jellybool加在后两个$符之间,
超出八位字符的会截取前八位,总长为12位;crypt默认就是这种形式。
*/
echo "<hr>";
//crypt还有多种盐值加密支持,详见手册

Sha1加密:

string sha1 ( string $str [, bool $raw_output = false ]

1.跟md5很像,不同的是sha1()默认情况下返回40个字符的散列值,传入参数性质一样,第一个为加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,sha1()则会返回原始的20 位原始格式报文摘要
2.sha1()也是单行加密,没有逆向解密算法

<?php
$my_intro="jellybool";
echo sha1($my_intro);
//输出:c98885c04c1208fd4d0b1dadd3bd2a9ff4d042ca
echo "<hr>";
//当然,可以将多种加密算法混合使用
echo md5(sha1($my_intro));
//输出:94f25bf9214f88b1ef065a3f9b5d9874
//这种方式的双重加密也可以提高数据的安全性

Urlencode加密:

string urlencode ( string $str )
1.一个参数,传入要加密的字符串(通常应用于对URL的加密),
2.urlencode为双向加密,可以用urldecode来加密(严格意义上来说,不算真正的加密)
3.返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。

<?php
  //urlencode()通常用于URL中明文数据的隐藏
  $my_urlencode="jellybool.com?jellybool=true + 4-3%5= \& @!";
  echo urlencode($my_urlencode);
  //输出:jellybool.com%3Fjellybool%3Dtrue+%2B+4-3%255%3D+%5C%26+%40%21
  echo "<hr>";
  $my_urldecode="jellybool.com%3Fjellybool%3Dtrue+%2B+4-3%255%3D+%5C%26+%40%21";
  echo urldecode($my_urldecode);
  //输出:jellybool.com?jellybool=true + 4-3%5= \& @! 
  //还原了$my_urlencode的输出
  echo "<hr>";
  $my_urldecode="http://www.baidu.com/s?word=jellybool+%E8%A7%89%E7%B4%AF%E4%B8%8D%E7%88%B1&tn=98236947_hao_pg&ie=utf-8";
  echo urldecode($my_urldecode);
  /*输出:http://www.baidu.com/s?word=jellybool 觉累不爱&tn=98236947_hao_pg&ie=utf-8
  没错,这就是在百度搜索jellybool 觉累不爱
  */

  /*
  =========================================================================
  解决第二个经典问题
  =========================================================================
  */
  $pre_url_encode="jellybool.com?username=jellybool&password=jelly";
  //在实际开发中,我们很多时候要构造这种URL,这是没有问题的
  $url_decode  ="jellybool.com?username=jelly&bool&password=jelly";
  /*注意上面两个变量的差别:第一个的username=jellybool,
              第二个为username=jelly&bool
  这种情况下用$_GET()来接受是会出问题的,这是可以用下面的方法解决 
  */
  $username="jelly&bool";
  $url_decode  ="jellybool.com?username=".urlencode($username)."&password=jelly";
  //这是可以很好的解决问题

  /*
  总结一下常见的urlencode()的转换字符
    ?=> %3F
    = => %3D
    % => %25
    & => %26
    \ => %5C
    + => %2B
    空格 => +
  */

base64编码加密:

string base64decode ( string $encodeddata )
1.base64_encode()接受一个参数,也就是要编码的数据(这里不说字符串,是因为很多时候base64用来编码图片)
2.base64encode()为双向加密,可用base64decode()来解密

echo base64_encode($my_intro);
echo "<hr>";
/*输出:SmVsbHlCb29s5piv5LiA5Liq6Lqr5p2Q5pyJ6auY5bqmLOiCqeiGgOacieWuveW
6pizog7jogozmnInljprluqYs5oCd5oOz5pyJ5rex5bqm55qE5Zu95a625YWN5qOA5Lq
UQee6p+S8mOi0qOS8quWJjeerr0lU55S35bGM5Lid
*/
echo base64_decode('SmVsbHlCb29s5piv5LiA5Liq6Lqr5p2Q5pyJ6auY5bqmLOiCqeiGg
OacieWuveW6pizog7jogozmnInljprluqYs5oCd5oOz5pyJ5rex5bqm55qE5Zu95a6
25YWN5qOA5LqUQee6p+S8mOi0qOS8quWJjeerr0lU55S35bGM5Lid');

/*输出:JellyBool是一个身材有高度,肩膀有宽度,胸肌有厚度,思想有深度的国家免检五A
级优质伪前端IT男?潘
*/

一个图片的例子:

<?php
/*
一个图片的应用例子
*/
$filename="https://worktile.com/img/index/index_video.png";

$data=file_get_contents($filename);
echo base64_encode($data);
/*然后你查看网页源码就会得到一大串base64的字符串,
再用base64_decode()还原就可以得到图片
*/

本文由 JellyBool 创作,原文

PHP 相关文章推荐
PHP入门速成(2)
Oct 09 PHP
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
深入解析php模板技术原理【一】
Jan 10 PHP
PHP set_time_limit(0)长连接的实现分析
Mar 02 PHP
php输出xml格式字符串(用的这个)
Jul 12 PHP
php文件下载处理方法分析
Apr 22 PHP
详解PHP对象的串行化与反串行化
Jan 24 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
自制PHP框架之设计模式
May 07 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
是 WordPress 让 PHP 更流行了 而不是框架
Feb 03 #PHP
composer.lock文件的作用
Feb 03 #PHP
网页的分页下标生成代码(PHP后端方法)
Feb 03 #PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 #PHP
Symfony学习十分钟入门经典教程
Feb 03 #PHP
php开发时容易忘记的一些技术细节
Feb 03 #PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 #PHP
You might like
Terran魔法科技
2020/03/14 星际争霸
用 php 编写的日历
2006/10/09 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
Python求导数的方法
2015/05/09 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
selenium如何定位span元素的实现
2021/01/13 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
纽约手袋品牌:KARA
2018/03/18 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
就业意向书
2014/07/29 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
普宁寺导游词
2015/02/04 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
浅谈Java父子类加载顺序
2021/08/04 Java/Android
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电