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 和 MySQL 基础教程(二)
Oct 09 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
php数组应用之比较两个时间的相减排序
Aug 18 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
基于php常用正则表达式的整理汇总
Jun 08 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
php自定义hash函数实例
May 05 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 PHP
浅析PHP数据导出知识点
Feb 17 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
如何开发一个虚拟域名系统
2006/10/09 PHP
PHP 采集心得技巧
2009/05/15 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
魅力教师事迹材料
2014/01/10 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
学生检讨书范文
2015/01/27 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫