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后台程序与Javascript的两种交互方式
Oct 25 PHP
PHP CKEditor 上传图片实现代码
Nov 06 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
May 04 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
PHP递归删除目录几个代码实例
Apr 21 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
PHP工厂模式的日常使用
Mar 20 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 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
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
php文件上传的两种实现方法
2016/04/04 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
Mootools 1.2教程 函数
2009/09/15 Javascript
28个JS验证函数收集
2010/03/02 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
node.js实现的装饰者模式示例
2017/09/06 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
vue实现下拉加载其实没那么复杂
2019/08/13 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
Python实现多并发访问网站功能示例
2017/06/19 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
优秀毕业生的求职信
2014/07/21 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android
Python正则表达式中flags参数的实例详解
2022/04/01 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python