专栏首页V站PHP中的MD5加密
原创

PHP中的MD5加密

V站笔记

综述:密码学是研究编制密码(我们简称为加密: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个字符,但明文中一点微小的变化使得结果发生了很大的变化,我们可以利用这个特点来检查数据中微小变化。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Tag标签页面如何优化呢

    很多站长都不会如何制作tag页面,的ag页面使用并不恰当,甚至可能会有负效果。不过一两句话很难说清,所以单独写个帖子聊一下tag标签页面怎样SEO。

    V站CEO-西顾
  • PHP网址缩短算法代码(修复PHP7.0问题)

    每个网址用6个字符代替,(32^6) 最多可以拥有1,073,741,824个短网址。当然,你还可以记录更详细的信息,如访问记录,创建时间等。如果真不够用了,还...

    V站CEO-西顾
  • Django踩坑笔记

    V站CEO-西顾
  • 数千台Linux主机被勒索,该如何打好防御战?

    近日,国外安全媒体先后报道了一款名为Lilocked的Linux勒索病毒,该勒索病毒目前为止已感染了6000+台Linux主机,加密后缀为.lilocked。俄...

    FB客服
  • 钓鱼攻防对抗战的今日现状:防守方完全落后挨打

    网络钓鱼主要用来骗取个人敏感信息,从而用于一些恶意目的。今天主要谈钓鱼用来做金融欺诈和身份盗窃的行为,包括对网银、购物等欺诈行为。随着上网人群的增多,钓鱼潜在...

    FB客服
  • 51Nod 1016 水仙花数 V2(组合数学,枚举打表法)

    1016 水仙花数 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 160         难度:6级算法题 水仙花数是指一个 n 位数 ...

    Angel_Kitty
  • Spark

    最后,关闭 Spark 可以调用 SparkContext 的 stop() 方法,或者直接退出应用(比如通过

    大学里的混子
  • 网站被黑被篡改怎么修复

    近期发现公司网站首页文件经常被篡改为indax.php或indax.html,导致网站的功能无法正常使用,百度搜索关键词,在显示结果中点击公司网站,打开后跳转到...

    技术分享达人
  • 【audio】耳机插拔 线控按键识别流程【转】

    本文以msm8909平台,android N为例,介绍了通用情况下,耳机插拔的流程步骤,以及对耳机类型的识别逻辑。以方便在项目工作中经常会遇到耳机不被识别,或者...

    233333
  • 前沿 | 硼酸钡钠,一种因机器学习而诞生的LED荧光粉

    10 月 22 日,化学系助理教授 Jakoah Brgoch 及其实验室成员在 Nature Communications 期刊上发表了关于该研究的论文。

    机器之心

扫码关注云+社区

领取腾讯云代金券