PHP中的MD5加密脚本之家快报 - 乐橙lc8

PHP中的MD5加密脚本之家快报

2019-02-06 08:54:51 | 作者: 昊硕 | 标签: 加密,运用,长度 | 浏览: 1837

总述:暗码学是研讨编制暗码(咱们简称为加密:encode)和破译暗码(咱们称之为解密:decode)的技术科学。研讨暗码改动的客观规律,运用于编制暗码以保存通讯隐秘的,称为编码学;运用于破译暗码以获取通讯情报的,称为破译学,总称暗码学。通常情况下,人们将可懂的文本称为明文;将明文变换成的不行懂的文本称为密文。把明文变换成密文的进程叫加密;其逆进程,即把密文变换成明文的进程叫解密。
PHP中供给了哪些数据加密功用?
PHP供给了crypt()函数完结加密功用:
string crypt (string input_string [, string salt])
这一函数完结被称作单向加密的功用,也就是说,它能够加密一些明码,但不能够将暗码转换为本来的明码。单向加密的口令一旦落入第三方人的手里,由于不能被还原为明文,因而也没有什么大用处。在验证用户输入的口令时,用户的输入选用的也是单向算法,假如输入与存储的经加密后的口令相匹配,则输入的口令一定是正确的。
这个函数的input_string参数是需求加密的字符串,第二个参数salt是一个位字串,它能够影响加密的暗码,进一步地扫除被称作预核算进犯的可能性。缺省情况下,PHP运用一个2个字符的DES搅扰串,假如你的体系运用的是MD5 ,它会运用一个12个字符的搅扰串。咱们能够经过履行下面的指令发现体系即将运用的搅扰串的长度:
print "体系运用的搅扰串的长度是:". CRYPT_SALT_LENGTH;
crypt()支撑四种算法,下面是它支撑的算法和相应的salt参数的长度:
[注:以下用表格]
算法 Salt长度
CRYPT_STD_DES 2-character (默许)
CRYPT_EXT_DES 9-character
CRYPT_MD5 12-character beginning with $1$
CRYPT_BLOWFISH 16-character beginning with $2$
怎样将PHP的数据加密功用运用于用户验证?
咱们用crypt()完成用户身份验证。比方咱们用一段PHP程序约束对一个目录的拜访,只允许注册用户拜访这一目录。咱们把材料存储MySQL数据库的一个表(这个数据表名为members)中:
mysql>CREATE TABLE members (
->username CHAR(14) NOT NULL,
->password CHAR(32) NOT NULL,
->PRIMARY KEY(username)
->);
然后,咱们能够输入用户的数据到该表中:
用户名 暗码
Tom keloD1C377lKE
John ba1T7vnz9AWgk
Bill paLUvRWsRLZ4U
这些加密的口令对应的明码分别是Tom、John和Bill。咱们将依据口令的前二个字母创立搅扰串:
$enteredPassword.
$salt = substr($enteredPassword, 0, 2);
$userPswd = crypt($enteredPassword, $salt);
// $userPswd然后就和用户名一同存储在MySQL 中
crypt()和Apache的口令-应对验证体系的运用
<?php
$host = "localhost"; //主机
$username = "Tom"; //用户名
$passwd = "Hello world"; //暗码
$db = "users"; //数据库名
// 设置是否经过验证标志,默许为否
$authorization = 0;
// 提示用户输入帐号和暗码
if (isset($PHP_AUTH_USER) && isset($PHP_AUTH_PW)){
mysql_pconnect($host, $username, $passwd) or die("不能连接到MySQL服务器!");
mysql_select_db($db) or die("不能挑选数据库!");
// 进行加密
$salt = substr($PHP_AUTH_PW, 0, 2);
$encrypted_pswd = crypt($PHP_AUTH_PW, $salt);
//SQL查询句子
$query = "SELECT username FROM members WHERE username = \$PHP_AUTH_USER\ AND password = \$encrypted_pswd\";
// 履行查询
if (mysql_numrows(mysql_query($query)) 1) {
$authorization = 1;
}
}
if (! $authorization){
header(\WWW-Authenticate: Basic realm="用户验证"\);
header(\HTTP/1.0 401 Unauthorized\);
print "无法经过验证";
exit;
}else {
print "现已加密";
}
?>
在缺省状态下运用的 crypt()并不是最安全的,所以假如需求较高的安全功能,就需求其他更好的算法,比方md5(),这一函数运用MD5散列算法。
怎么经过MD5方法进行加密?
PHP中经过MD5方法加密的函数有md5(),它的一个作用是混编。
一个混编函数能够将一个可变长度的信息变换为具有固定长度被混编过的输出,也被称作"信息文摘",这是非常有用的,由于 一个固定长度的字符串能够用来查看文件的完整性和验证数字签名与用户身份。PHP内置的md5()混编函数将把一个可变长度的信息转换为128位(32个字符)的信息文摘。混编的一个风趣的特点是:不能经过剖析混编后的信息得到本来的明码,由于混编后的成果 与本来的明码内容没有依靠联系。即使只改动一个字符串中的一个字符,也将使得MD5混编算法核算出二个天壤之别的成果。咱们首要来看下表的内容及其相应的成果:
运用md5()混编字符串
<php
$input = "Hello,PHP world!";
$output = md5($input);
print "输出: $output ";
?>
成果:
输出: 7996b5e0804042fd531907a4900f190e
留意,成果的长度为32个字符。咱们把$input的值略微改动一下:
运用md5()对一个略微改动的字符串进行混编
<?php
$input = "Hello,PHP World!";
$output = md5($input);
print "输出: $output ";
?>
成果:
hash2: f0456d48ed06a5c35b1e42561fa7a016
能够发现,虽然二个成果的长度都是32个字符,但明文中一点细小的改动使得成果发生了很大的改动,咱们能够使用这个特点来查看数据中细小改动。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章