配色: 字号:
PHP中的MD5加密
2012-06-12 | 阅:  转:  |  分享 
  
PHP中的MD5加密

密码学是研究编制密码(我们简称为加密:encode)和破译密码(我们称之为解密:decode)的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。通常情况下,人们将可懂的文本称为明文;将明文变换成的不可懂的文本称为密文。把明文变换成密文的过程叫加密;其逆过程,即把密文变换成明文的过程叫解密。

PHP中提供了哪些数据加密功能?

PHP提供了crypt()函数完成加密功能:

stringcrypt(stringinput_string[,stringsalt])

这一函数完成被称作单向加密的功能,也就是说,它可以加密一些明码,但不能够将密码转换为原来的明码。单向加密的口令一旦落入第三方人的手里,由于不能被还原为明文,因此也没有什么大用处。在验证用户输入的口令时,用户的输入采用的也是单向算法,如果输入与存储的经加密后的口令相匹配,则输入的口令一定是正确的。

这个函数的input_string参数是需要加密的字符串,第二个参数salt是一个位字串,它能够影响加密的暗码,进一步地排除被称作预计算攻击的可能性。缺省情况下,PHP使用一个2个字符的DES干扰串,如果你的系统使用的是MD5,它会使用一个12个字符的干扰串。我们可以通过执行下面的命令发现系统将要使用的干扰串的长度:

print"系统使用的干扰串的长度是:".CRYPT_SALT_LENGTH;

crypt()支持四种算法,下面是它支持的算法和相应的salt参数的长度:

[注:以下用表格]

算法Salt长度

CRYPT_STD_DES2-character(默认)

CRYPT_EXT_DES9-character

CRYPT_MD512-characterbeginningwith$1$

CRYPT_BLOWFISH16-characterbeginningwith$2$

怎样将PHP的数据加密功能应用于用户验证?

我们用crypt()实现用户身份验证。比如我们用一段PHP程序限制对一个目录的访问,只允许注册用户访问这一目录。我们把资料存储MySQL数据库的一个表(这个数据表名为members)中:

mysql>CREATETABLEmembers(

->usernameCHAR(14)NOTNULL,

->passwordCHAR(32)NOTNULL,

->PRIMARYKEY(username)

->);

然后,我们可以输入用户的数据到该表中:

用户名密码

TomkeloD1C377lKE

Johnba1T7vnz9AWgk

BillpaLUvRWsRLZ4U

这些加密的口令对应的明码分别是Tom、John和Bill。我们将根据口令的前二个字母创建干扰串:

$enteredPassword.

$salt=substr($enteredPassword,0,2);

$userPswd=crypt($enteredPassword,$salt);

//$userPswd然后就和用户名一起存储在MySQL中

crypt()和Apache的口令-应答验证系统的应用



$host="localhost";//主机

$username="Tom";//用户名

$passwd="Helloworld";//密码

$db="users";//数据库名

//设置是否通过验证标志,默认为否

$authorization=0;

//提示用户输入帐号和密码

if(isset($PHP_AUTH_USER)&&isset($PHP_AUTH_PW)){

mysql_pconnect($host,$username,$passwd)ordie("不能连接到MySQL服务器!");

mysql_select_db($db)ordie("不能选择数据库!");

//进行加密

$salt=substr($PHP_AUTH_PW,0,2);

$encrypted_pswd=crypt($PHP_AUTH_PW,$salt);



献花(0)
+1
(本文系红人会首藏)