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实现分页的一个示例
Oct 09 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
smarty中js的调用方法示例
Oct 27 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
PHP的pcntl多进程用法实例
Mar 19 PHP
CodeIgniter删除和设置Cookie的方法
Apr 07 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
thinkPHP5 ACL用户权限模块用法详解
May 10 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
PHP 并发场景的几种解决方案
Jun 14 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
Sony CFR 320 修复改造
2020/03/14 无线电
php实现的MySQL通用查询程序
2007/03/11 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
浅谈JS和jQuery的区别
2019/03/27 jQuery
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
Python简单实现控制电脑的方法
2018/01/22 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
波兰珠宝品牌:YES
2019/08/09 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
七年级生物教学反思
2014/01/30 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
解决python3安装pandas出错的问题
2021/05/20 Python
python opencv旋转图片的使用方法
2021/06/04 Python
Nginx限流和黑名单配置
2022/05/20 Servers
TypeScript 内置高级类型编程示例
2022/09/23 Javascript