PHP数据加密技术之一---CRYPT()加密

来源:互联网 发布:usb3.0端口电压 编辑:程序博客网 时间:2024/05/16 10:03

PHP数据加密技术

string crypt ( string $str [, string $salt ] )

crypt() 返回一个基于标准 UNIX DES 算法或系统上其他可用的替代算法的散列字符串。 

第一个为需要加密的字符串,第二个为盐值(就是加密干扰值,如果没有提供,则默认由PHP自动生成);返回散列后的字符串或一个少于 13 字符的字符串,后者为了区别盐值。

其中使用盐值的意思是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

在 crypt() 函数支持多重散列的系统上,下面的常量根据相应的类型是否可用被设置为 0 或 1:

 

 

每一个常量的使用方式:

CRYPT_STD_DES - 基于标准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的两个字符作为盐值。在盐值中使用非法的字符将导致 crypt() 失败。 

<?php
$p "123456";
if(CRYPT_STD_DES){
    echo crypt($p,"456");
}
?>

 

“456”中只有45这两个字符起作用

 

CRYPT_EXT_DES - 扩展的基于 DES 算法的散列。其盐值为 9 个字符的字符串,由 1 个下划线后面跟着 4 字节循环次数和 4 字节盐值组成。它们被编码成可打印字符,每个字符 6 位,有效位最少的优先。0 到 63 被编码为 "./0-9A-Za-z"。在盐值中使用非法的字符将导致 crypt() 失败。 

<?php
if (CRYPT_EXT_DES == 1) {
    echo 'Extended DES: ' crypt('rasmuslerdorf''_J9..rasm') . "\n";
}
?>

 

CRYPT_MD5 - MD5 散列使用一个以 $1$ 开始以$结束的 12 字符的字符串盐值。 

<?php
if (CRYPT_MD5 == 1) {
    echo 'MD5:          ' crypt('rasmuslerdorf''$1$rasmusle$') . "\n";
}
?>

 

CRYPT_BLOWFISH - Blowfish 算法使用如下盐值:"$2a$",一个两位 cost 参数,"$" 以及 64 位由 "./0-9A-Za-z" 中的字符组合而成的字符串。在盐值中使用此范围之外的字符将导致 crypt() 返回一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的范围是 04-31,超出这个范围将导致 crypt() 失败。 PHP 5.3.7 之前只支持 "$2a$" 作为盐值的前缀,PHP 5.3.7 开始引入了新的前缀来修正一个在Blowfish实现上的安全风险。总而言之,开发者如果仅针对 PHP 5.3.7及之后版本进行开发,那应该使用 "$2y$" 而非 "$2a$" 

 

<?php
if (CRYPT_BLOWFISH == 1) {
    echo 'Blowfish:     ' crypt('rasmuslerdorf''$2a$07$usesomesillystringforsalt$') . "\n";
}
?>

 

CRYPT_SHA256 - SHA-256 算法使用一个以 $5$ 开头的 16 字符字符串盐值进行散列如果盐值字符串以 "rounds=<N>$" 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。 

<?php
if (CRYPT_SHA256 == 1) {
    echo 'SHA-256:      ' crypt('rasmuslerdorf''$5$rounds=5000$usesomesillystringforsalt$') . "\n";
}
?>

 

CRYPT_SHA512 - SHA-512 算法使用一个以 $6$ 开头的 16 字符字符串盐值进行散列如果盐值字符串以 "rounds=<N>$" 开头,N 的数字值将被用来指定散列循环的执行次数,这点很像 Blowfish 算法的 cost 参数。默认的循环次数是 5000,最小是 1000,最大是 999,999,999。超出这个范围的 N 将会被转换为最接近的值。 

<?php
if (CRYPT_SHA512 == 1) {
    echo 'SHA-512:      ' crypt('rasmuslerdorf''$6$rounds=5000$usesomesillystringforsalt$') . "\n";
}
?>

 

 

 

 

 

 

 

 


1 0
原创粉丝点击