PHP内置加密函数详解


Posted in PHP onNovember 20, 2016

Md5()加密算法

方式: 单向加密

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

$str:原始字符串

$raw_output:如果可选的raw_output被设置为true, 那么md5报文摘要将以16字节长度的原始二进制格式返回. 返回以32位字符十六进制数字形式返回散列值

md5二次加密:md5(md5($string, true))

Crypt()加密算法

方式: 单向加密

语法: string crypt(string $str[, string $salt]) , 返回一个基于标准UNIX DES算法或系统上其它可用的替代算法的三列字符串

$str: 需要加密的明文

$salt: 加密时的干扰串,是编码更安全

注意: 如果加密时没有加上这个$salt参数, 将随机生成一个干扰串, 否则刷新加密秘文不变

算法常量:

[CRYPT_SALT_LENGTH]

默认的加密长度。使用标准的 DES 加密,长度为 2

[CRYPT_STD_DES]

基于标准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的两个字符作为盐值。在盐值中使用非法的字符将导致 crypt() 失败。

[CRYPT_EXT_DES]

扩展的基于 DES 算法的散列。其盐值为 9 个字符的字符串,由 1 个下划线后面跟着 4 字节循环次数和 4 字节盐值组成。它们被编码成可打印字符,每个字符 6 位,有效位最少的优先。0 到 63 被编码为 "./0-9A-Za-z"。在盐值中使用非法的字符将导致 crypt() 失败。

[CRYPT_MD5]

MD5 散列使用一个以 $1$ 开始的 12 字符的字符串盐值。

[CRYPT_BLOWFISH]

Blowfish 算法使用如下盐值:“$2a$”,一个两位 cost 参数,“$” 以及 64 位由 “./0-9A-Za-z” 中的字符组合而成的字符串。在盐值中使用此范围之外的字符将导致 crypt() 返回一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的范围是 04-31,超出这个范围将导致 crypt() 失败。

CRYPT_SHA256

SHA-256 算法使用一个以 $5$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=<N>$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。

CRYPT_SHA512

SHA-512 算法使用一个以 $6$ 开头的 16 字符字符串盐值进行散列。如果盐值字符串以 “rounds=<N>$” 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。

例:

if(CRYPT_MD5){
  echo "MD5加密:".crypt('something','$1$somethin$');
}

Sha1()加密算法

方式: 单向加密

语法: string sha1(string $str [, bool $raw_output=false]) 计算字符串的sha1散列值

$str: 加密的字符串

$raw_output: 如果可选的raw_output参数被设置为TRUE, 那么sha1摘要将以20字符长度的原始格式返回, 否则返回值是一个40字符串长度的十六进制数字.

URL编码加密技术

编码URL字符串: urlencode(string $str)

解码已编码的URL字符串: urldeocde(string $str)

编码规范: 此字符串中除了-_.之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数, 空格则编码为加号(+)

按照RFC1738对URL进行编码: rawurlencode(string $str) : 返回从字符串,把空格编码为%20

对已编码的字符串进行解码: rawurldecode(string $str) : 返回字符串, 此字符串中百分号%后跟两位十六进制的序列豆将被替换成原义字符

urlencode和rawurlencode的区别只在于空格.

Base64编码加密技术

使用base64对data进行编码: base64_encode(string $data)

对使用MIME base64编码的数据进行解码: base64_decode(string $data[, $strict=false]) ; $strict:如果输入的数据超出了base64的字母表,则返回false.

base64编码的图片还可以直接放在<img>标签中显示:

<img src="data:image/jpeg;base64,编码字符串" alt=""/>

<img src="data:;base64,编码字符串" alt=""/>

信息加密技术:

1 单项散列加密:

指通过不同输入的长度的信息进行散列计算, 得到固定长度的输出, 这个散列计算过程是单向的, 既不能对固定长度的输出进行计算从而活儿输出信息.

2 对称散列加密

指加密和解密的密匙是同一个密匙或者可以互相推算.

3 非对称散列加密

非对称加密和解密的密匙不是同一个密匙, 其中一个对外公开, 被称作公钥, 另一个只有所有者知道.

PHP 相关文章推荐
PHP生成静态页面详解
Dec 05 PHP
PHP 数组排序方法总结 推荐收藏
Jun 30 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
php判断用户是否关注微信公众号
Jul 22 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
php简单中奖算法(实例)
Aug 15 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 PHP
php PDO异常处理详解
Nov 20 #PHP
php.ini中date.timezone设置详解
Nov 20 #PHP
centos 7.2下搭建LNMP环境教程
Nov 20 #PHP
浅析php中array_map和array_walk的使用对比
Nov 20 #PHP
php解决DOM乱码的方法示例代码
Nov 20 #PHP
使用Yii2实现主从数据库设置
Nov 20 #PHP
php 二维数组时间排序实现代码
Nov 19 #PHP
You might like
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
php面向对象重点知识分享
2019/09/27 PHP
javascript document.images实例
2008/05/27 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
用js实现in_array的方法
2013/11/05 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python基于queue和threading实现多线程下载实例
2014/10/08 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
python 换位密码算法的实例详解
2017/07/19 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
Python3中详解fabfile的编写
2018/06/24 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
python同步两个文件夹下的内容
2019/08/29 Python
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
EJB timer的种类
2014/10/28 面试题
收银员的岗位职责范本
2014/02/04 职场文书
《学棋》教后反思
2014/04/14 职场文书
2014年派出所工作总结
2014/11/21 职场文书
维稳承诺书
2015/01/20 职场文书