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与XML的PDF文档生成技术
Oct 09 PHP
PHP 身份证号验证函数
May 07 PHP
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
php发送与接收流文件的方法
Feb 11 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
May 05 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
PHP实现链表的定义与反转功能示例
Jun 09 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
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
javascript之函数直接量(function(){})()
2007/06/29 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
js DOM的学习笔记
2011/12/22 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Python操作MySQL数据库的方法
2018/06/20 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Python 硬币兑换问题
2019/07/29 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python中Selenium模块的使用详解
2020/10/09 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
八年级美术教学反思
2014/02/02 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
个人工作表现评价材料
2014/09/21 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
先进工作者推荐材料
2014/12/23 职场文书
让世界充满爱观后感
2015/06/10 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android