php怎么实现数据加密

2021-06-20 作者:未知   |   浏览(
php自带MD5加密函数,但这种加密太容易见到,下面我们说下更深入的过程
密码学是研究编制密码(大家简称为加密:enp)和破译密码(大家称之为解密:dep)的技术科学。研究密码变化的客观规律,应用于编制密码以守旧通信秘密的,称为编码学;应用于破译密码以获得通信情报的,称为破译学,总称密码学。一般情况下,大家将可懂的文本称为明文;将明文变换成的不可懂的文本称为密文。把明文变换成密文的过程叫加密;其逆过程,即把密文变换成明文的过程叫解密。
  PHP中提供了哪些数据加密功能?
  PHP提供了crypt函数完成加密功能:
    string crypt
  这一函数完成被称作单向加密的功能,也就是说,它可以加密一些明码,但不可以够将密码转换为原来的明码。单向加密的口令一旦落入第三方人的手里,因为不可以被还原为明文,因此也没什么大用处。在验证用户输入的口令时,用户的输入使用的也是单向算法,假如输入与存储的经加密后的口令相匹配,则输入的口令肯定是正确的。
  这个函数的input_string参数是需要加密的字符串,第二个参数salt是一个位字串,它可以影响加密的暗码,进一步地排除被称作预计算攻击的可能性。缺省状况下,PHP用一个2个字符的DES干扰串,假如你的系统用的是MD5 ,它会用一个12个字符的干扰串。大家可以通过实行下面的命令发现系统将要用的干扰串的长度:
    print "系统用的干扰串的长度是:". CRYPT_SALT_LENGTH;
  crypt支持四种算法,下面是它支持的算法和相应的salt参数的长度:
[注:以下用表格]
算法Salt长度CRYPT_STD_DES2-character (默认)CRYPT_EXT_DES9-characterCRYPT_MD512-character beginning with $1$CRYPT_BLOWFISH16-character beginning with $2$
  如何将PHP的数据加密功能应用于用户验证?
  大家用crypt达成用户身份验证。譬如大家用一段PHP程序限制对一个目录的访问,只允许注册用户访问这一目录。大家把资料存储MySQL数据库的一个表(这个数据表名为members)中:
    mysql>CREATE TABLE members NOT NULL,
    ->password CHAR NOT NULL,
    ->PRIMARY KEY
    ->);
  然后,大家可以输入用户的数据到该表中:
用户名密码TomkeloD1C377lKEJohnba1T7vnz9AWgkBillpaLUvRWsRLZ4U
  这部分加密的口令对应的明码分别是Tom、John和Bill。大家将依据口令的前二个字母创建干扰串:
    $enteredPassword.
    $salt = substr;
    $userPswd = crypt;
    // $userPswd然后就和用户名一块存储在MySQL 中
  crypt和Apache的口令-应答验证系统的应用
    <?php
    $host = "localhost"; //主机
    $username = "Tom"; //用户名
    $passwd = "Hello world"; //密码
    $db = "users"; //数据库名
    // 设置是不是通过验证标志,默觉得否
    $authorization = 0;
    // 提示用户输入帐号和密码
    if && isset){
      mysql_pconnect or die;
      mysql_select_db or die;
      // 进行加密
      $salt = substr;
      $encrypted_pswd = crypt;
      //SQL查看语句
      $query = "SELECT username FROM members WHERE username = \'$PHP_AUTH_USER\' AND password = \'$encrypted_pswd\'";
      // 实行查看
      if ) == 1) {
        $authorization = 1;
      }
    }
    if {
      header;
      header;
      print "没办法通过验证";
      exit;
    }else {
      print "已经加密";
    }
    ?>
  在缺省状况下用的 crypt并非最安全的,所以假如需要较高的安全性能,就需要其他更好的算法,譬如md5,这一函数用MD5散列算法。
  怎么样通过MD5方法进行加密?
  PHP中通过MD5方法加密的函数有md5,它的一个用途是混编。
  一个混编函数可以将一个可变长度的信息变换为具备固定长度被混编过的输出,也被称作"信息文摘",这是十分有用的,由于 一个固定长度的字符串可以用来检查文件的完整性和验证数字签名与用户身份。PHP内置的md5混编函数将把一个可变长度的信息转换为128位(32个字符)的信息文摘。混编的一个有趣的特征是:不可以通过剖析混编后的信息得到原来的明码,由于混编后的结果 与原来的明码内容没依靠关系。即使只改变一个字符串中的一个字符,也将使得MD5混编算法计算出二个完全不同的结果。大家第一来看下表的内容及其相应的结果:
  用md5混编字符串
    <php
    $input = "Hello,PHP world!";
    $output = md5;
    print "输出: $output ";
    ?>
  结果:
    输出: 7996b5e0804042fd531907a4900f190e
  注意,结果的长度为32个字符。大家把$input的值稍微改变一下:
  用md5对一个稍微变化的字符串进行混编
    <?php
    $input = "Hello,PHP World!";
    $output = md5;
    print "输出: $output ";
    ?>
  结果:
    hash3: f0456d48ed06a5c35b1e42561fa7a016
  可以发现,尽管二个结果的长度都是32个字符,但明文中一点微小的变化使得结果发生了非常大的变化,大家可以借助这个特征来检查数据中微小变化。