PHP内置加密函数详解
Md5()加密算法
方式:单向加密
语法:md5(string$str[,bool$raw_output=false])
$str:原始字符串
$raw_output:如果可选的raw_output被设置为true,那么md5报文摘要将以16字节长度的原始二进制格式返回.返回以32位字符十六进制数字形式返回散列值
md5二次加密:md5(md5($string,true))
Crypt()加密算法
方式:单向加密
语法:stringcrypt(string$str[,string$salt]),返回一个基于标准UNIXDES算法或系统上其它可用的替代算法的三列字符串
$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()加密算法
方式:单向加密
语法:stringsha1(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)
对使用MIMEbase64编码的数据进行解码:base64_decode(string$data[,$strict=false]);$strict:如果输入的数据超出了base64的字母表,则返回false.
base64编码的图片还可以直接放在<img>标签中显示:
<imgsrc="data:image/jpeg;base64,编码字符串"alt=""/>
<imgsrc="data:;base64,编码字符串"alt=""/>
信息加密技术:
1单项散列加密:
指通过不同输入的长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,既不能对固定长度的输出进行计算从而活儿输出信息.
2对称散列加密
指加密和解密的密匙是同一个密匙或者可以互相推算.
3非对称散列加密
非对称加密和解密的密匙不是同一个密匙,其中一个对外公开,被称作公钥,另一个只有所有者知道.