事件:有消息称某网站超12G数据疑似外泄,涉及数千万用户。javascript
那咱们应该如何考虑数据的安全存储?php
让咱们一块儿来聊聊数据的加密技术。java
单向散列加密算法
单向散列加密就是把任意长的输入消息串变化成固定长的输出串且由输出串难以获得输入串的一种加密算法。后端
常见单向散列函数:安全
利用单项散列加密的这个特性,能够进行密码加密保存。微信
PHP 处理密码的几种方式函数
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函数:php.net/manual/zh/f…
password_hash (安全)
//支持版本 (PHP 5 >= 5.5.0, PHP 7)
echo password_hash($password, PASSWORD_DEFAULT);复制代码
解释:password_hash() 使用足够强度的单向散列算法建立密码的哈希(hash)。
PHP函数:php.net/manual/zh/f…
PHP端验证密码是否正确?
$password = 'e4r3t2y1u';
$strPwdHash = password_hash($password, PASSWORD_DEFAULT);
if (password_verify($password, $strPwdHash)) {
//验证成功
} else {
//验证失败
}复制代码
对称加密
采用单钥密码系统的加密方法,同一个密钥能够同时用做信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
优势:对称加密算法的优势是算法公开、计算量小、加密速度快、加密效率高。
缺点:在数据传送前,发送方和接收方必须商定好秘钥,双方必须保存好秘钥。
经常使用算法:
PHP 相关类库,网上都能找到。
非对称加密
非对称加密算法须要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
请查看历史文章:PHP 使用非对称加密算法 (RSA)
密钥安全管理
上面说到的这几种加密技术,可以达到安全保密效果的一种重要前提就是密钥的安全。
在实际工做中,咱们有开发环境,预发布环境,正式环境,每一个环境中的密钥都不相同。
那么,咱们应该如何保存密钥呢?
暂时就想到这么多,望大神提供新的思路~
Thanks ~
做者:PHP后端开发者
免费提供技术咨询服务(本身懂的知识)。
QQ群:564557094。
关注微信公众号,留言便可,看到留言后会及时回复。