PHP内置加密函数详解

 更新时间:2016年11月20日 15:27:26   投稿:hebedich  
在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密函数

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 非对称散列加密

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

相关文章

  • session在php5.3中的变化 session_is_registered() is deprecated in

    session在php5.3中的变化 session_is_registered() is deprecated in

    在php 5.3中session_is_registered()已经是放弃使用了,大家在使用过程中需要注意一下了
    2013-11-11
  • PHP isset()函数使用方法详解

    PHP isset()函数使用方法详解

    isset()函数是PHP中的内置函数,用于确定是否声明了变量且其值不等于NULL,本文将详细给大家介绍PHP isset()函数的具体使用方法,有感兴趣的同学可以跟着小编一起来学习
    2023-07-07
  • 从wamp到xampp的升级之路

    从wamp到xampp的升级之路

    这篇文章主要介绍了从wamp到xampp的升级之路的相关资料,十分的详细,需要的朋友可以参考下
    2015-04-04
  • PHP MSSQL 存储过程的方法

    PHP MSSQL 存储过程的方法

    在PHP中调用MS SQL存储过程的核心代码
    2008-12-12
  • PHPMailer安装方法及简单实例

    PHPMailer安装方法及简单实例

    PHPMailer是一个用PHP写的用于邮件发送的类,有点像Jmail,相信很多新手和我一样,开始很茫然,不知道怎么安装,查找了一下,发现这方面的资料真的少之又少,一个文章被转载千百次,一搜索全是同一个内容,真不知道说什么好,其实打开安装里的readme就一目了然了,闲话少说,安装其实很简单。
    2008-11-11
  • PHP在线调试执行的实现方法(附demo源码)

    PHP在线调试执行的实现方法(附demo源码)

    这篇文章主要介绍了PHP在线调试执行的实现方法,实例分析了PHP实现在线调试运行的原理,步骤与具体实现代码,并附带demo源码供读者下载参考,需要的朋友可以参考下
    2016-04-04
  • PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码

    PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码

    做一个内网根据MAC地址自动登录的应用,在WINDOW 2003可以正常使用,函数如下
    2011-08-08
  • Discuz 模板语句分析及知识技巧

    Discuz 模板语句分析及知识技巧

    Discuz模板语句分析及知识技巧,其实大家可以多研究下各种程序cms系统,不过前提是,大家的基础已经不错了。
    2009-08-08
  • php将textarea数据提交到mysql出现很多空格的解决方法

    php将textarea数据提交到mysql出现很多空格的解决方法

    这篇文章主要介绍了php将textarea数据提交到mysql出现很多空格的解决方法,分析了空格出现的原因以及删除空格的简单实现技巧,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • phplot生成图片类用法详解

    phplot生成图片类用法详解

    这篇文章主要介绍了phplot生成图片类用法,较为详细的分析了phplot生成图片类常用函数的用法及生成图片的完整实例,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01

最新评论