php加密技术

主要有crypt(),md5(),sha1()这3个函数。还有加密扩展库mcrypt和mhash

1.crypt()(单向加密,安全性较低)

String crypt(String str[,String salt]);

salt参数为加密时使用的干扰串,如果省去,会随机生成一个干扰串,该函数支持4种算法和长度。

2.md5()

String md5(String str[,bool raw_output]);

raw_output参数默认为false,如果为真,函数返回一个二进制形式的密文。

3.sha1()     secure hash algorithm(安全哈希算法)

String sha1(String str[,bool raw_output]);

函数返回一个40位的16进制数,如果raw_output为真,则返回一个20位的2进制数。

                                                  Mcrypt库

libmcrypt.dll 到windows(php.ini配置的initDir 目录),然后配置php.ini文件中的extension=libmcrypt.dll;

mcypt支持20多种加密算法和8种加密模式。

mcypt_list_algorithms()和mcypt_list_modes()都返回一个数组,可以用foreach循环出来查看mcypt支持的加密算法和模式。

<?php

$en_dir = mcrypt_list_algorithms() ;

echo "Mcrypt支持的算法有:";

foreach($en_dir as $en_value){

   echo '<br>';

   echo $en_value." ";

}

?>

<?php

$mo_dir = mcrypt_list_modes() ;

echo "<p>Mcrypt支持的加密模式有:";

foreach($mo_dir as $mo_value){

   echo '<br>';

   echo $mo_value." ";

}

?>

输出为:

Mcrypt支持的算法有:

cast-128

gost

rijndael-128

twofish

arcfour

cast-256

loki97

rijndael-192

saferplus

wake

blowfish-compat

des

rijndael-256

serpent

xtea

blowfish

enigma

rc2

tripledes

Mcrypt支持的加密模式有:

cbc

cfb

ctr

ecb

ncfb

nofb

ofb

stream

应用mcrypt库的一个例子:

<?php

$str = "被加密的内容:相见时难别亦难 东风无力百花残";

$key = "key:111";     //密匙

$cipher = MCRYPT_DES; //加密算法

$modes = MCRYPT_MODE_ECB;//加密模式

$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND); //初始化向量

echo "加密前:".$str."<p>";

//加密:

$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv);//里面的$cipher,$modes可以不与mcrypt_get_iv_size里的一样

echo "加密后:".$str_encrypt." <p>";

$str_decrypt = mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv);//要跟上面的加密里的$cipher,$modes一样才能还原

echo "还原:".$str_decrypt;

?>

输出:

加密前:被加密的内容:相见时难别亦难 东风无力百花残

加密后: 鞤"猀车摰 D瓇A?Jo鷟?咦N翢? 蟮E6?鄹[p}??

还原:被加密的内容:相见时难别亦难 东风无力百花残

                                                 Mhash库

libmash.dll 配置方式同上

mhash支持md5,sha1,crc32等多种散列算法,可以使用mhash_count()和mhash_get_hash_name()输出支持的算法名称。

<?php

$num = mhash_count();          //函数返回最大的hash id

echo "Mhash库支持的算法有:";

for($i = 0; $i <= $num; $i++){

echo '<br>';

echo $i."=>".mhash_get_hash_name($i);    //输出每一个hash id 的名称

}

?>

输出:

Mhash库支持的算法有:

0=>CRC32

1=>MD5

2=>SHA1

3=>HAVAL256

4=>

5=>RIPEMD160

6=>

7=>TIGER

8=>GOST

9=>CRC32B

10=>HAVAL224

11=>HAVAL192

12=>HAVAL160

13=>HAVAL128

14=>TIGER128

15=>TIGER160

16=>MD4

17=>SHA256

18=>ADLER32

mhash应用小例子:

<?php

$filename = '07.txt';

$str = file_get_contents($filename);//获取文件全部内容

$hash = 2;    //The hash id. One of the MHASH_XXX constants.

$password = '111';

$salt = '4444';//干扰串 8字节,小于8字节的用0补齐

$key = mhash_keygen_s2k(1,$password,$salt,10);//生成密钥. 1表示1个MHASH_XXX constant,10表示字节长度

$str_mhash = bin2hex(mhash($hash,$str,$key));//讲2进制转化为16进制,生成16进制的校验码

echo "文件07.txt的校验码是:".$str_mhash;

?>

输出:

文件07.txt的校验码是:d03e414026e6e5f0699e8d66e3a1a1e23caea04f

你可能感兴趣的:(PHP)