单向散列加密php
单向散列加密就是把任意长的输入消息串变化成固定长的输出串且由输出串难以获得输入串的一种加密算法。算法
常见单向散列函数:安全
MD5 (Message Digest Algorithm 5)函数
SHA (Secure Hash Algorithm)加密
MAC (Message Authentication Code)spa
CRC (Cyclic Redundancy Check).net
利用单项散列加密的这个特性,能够进行密码加密保存。3d
PHP 处理密码的几种方式code
MD5(不推荐)md5
$password = md5($_POST["password"]);
缘由:加密算法比较简单,并且不少破解密码的站点都存放了大量的通过MD5加密的密码字符串。
SHA256 和 SHA512(不推荐)
$password = hash("sha256", $password);
缘由:加密算法比较简单。
盐值(额外字符串)(经常使用)
<?php $strSalt = '2f9c8d7h6g7f8d9k'; echo hash("sha256", $password . $strSalt);
解释:在加密的过程当中,新增了一个字符串。
Bcrypt (比较安全)
$strSalt = '2f9c8d7h6g7f8d9k'; $salt = '$2y$11$' . $strSalt; echo crypt($password, $salt);
解释:salt 参数是可选的。然而,若是没有salt的话,crypt()建立出来的会是弱密码。
PHP函数:http://php.net/manual/zh/func...
password_hash (安全)
//支持版本 (PHP 5 >= 5.5.0, PHP 7) echo password_hash($password, PASSWORD_DEFAULT);
解释:password_hash() 使用足够强度的单向散列算法建立密码的哈希(hash)。
PHP函数:http://php.net/manual/zh/func...
PHP端验证密码是否正确?
$password = 'e4r3t2y1u'; $strPwdHash = password_hash($password, PASSWORD_DEFAULT); if (password_verify($password, $strPwdHash)) { //验证成功 } else { //验证失败 }
对称加密
采用单钥密码系统的加密方法,同一个密钥能够同时用做信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
优势:对称加密算法的优势是算法公开、计算量小、加密速度快、加密效率高。
缺点:在数据传送前,发送方和接收方必须商定好秘钥,双方必须保存好秘钥。
经常使用算法:
DES
AES
PHP 相关类库,网上都能找到。
非对称加密
非对称加密算法须要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
请查看历史文章:PHP 使用非对称加密算法 (RSA)
密钥安全管理
上面说到的这几种加密技术,可以达到安全保密效果的一种重要前提就是密钥的安全。
在实际工做中,咱们有开发环境,预发布环境,正式环境,每一个环境中的密钥都不相同。
那么,咱们应该如何保存密钥呢?
写在源码中(不可取)。
写在配置文件中。(大部分这样干)。
写在环境变量中。(大部分这样干)。
保存在一个系统中,每次加密、解密都调取服务系统(系统开销大)。
本身写一个扩展,用PHP调取本身的扩展(维护成本高)。
暂时就想到这么多,望大神提供新的思路~
Thanks ~
AD: