您的位置:首页 > Web前端

【前端安全】密码安全

2019-04-08 09:09 429 查看

密码安全

密码的作用:
证明你是你

密码-对比

存储的密码 <----对比----->输入的密码

只有用户知道,密码是一定要私密的,密码的作用就是对比

密码-泄露渠道

  • 数据库被偷
  • 服务器被入侵
  • 通讯被窃听
  • 内部人员泄露数据
  • 其他网站(撞库)

密码-存储

  • 严禁明文存储(防泄露)
  • 单向变换(防泄漏)
  • 变换复杂度要求(防猜解)
  • 密码复杂度要求(防猜解)
  • 加盐(防猜解)

密码是可以通过哈希算法(信息摘要算法)进行加密

  • 明文-密码 一一对应
  • 雪崩效应:一个字符不一样 密文就完全不一样
  • 密文-明文 无法反推
  • 密文固定长度
  • 常见的哈希算法:md5,sha1.sha256

密码-md5单向变换


没法逆推,但是可以通过查表得知

密码-单向变换彩虹表

这里是只进行了一次md5加密,我们可以通过加载变化的复杂度。

  • md5(明文) = 密文
  • md5((明文)) = 密文
  • md5(sha1(明文)) = 密文
  • md5(sha256(sha1(明文))) = 密文

通过复杂的密码对抗彩虹表,一般来说彩虹表收录的都是比较简单的。

密码-加盐

原始密码+盐再变化生成新的密码

md5(sha1(md5(ID+fsdjks+原始密码+fsdf+盐)))

  • 密码的变换次数越多越安全
  • 加密成本几乎不变(生成密码时的速度慢一些)
  • 彩虹表失效(数量太多,无法建立通用性)
  • 解密成本增大N倍。
var password = {};

var md5 = function (str) {
var crypto = require('crypto');
var md5Hash = crypto.createHash('md5');
md5Hash.update(str);
return md5Hash.digest('hex');
}

password.getSalt = function() {
return md5(Math.random()*999999 + '' + new Date().getTime());
}

password.encryptPassword = function(salt, password) {
return md5(salt + 'sfdhjkhjkf23@#' + password);
}

module.exports = password;
var salt = password.getSalt();
var newPassword = password.encryptPassword(salt, user.password);

密码 - 密码传输的安全性

  • https传输
  • 频率限制
  • 前端加密意义有限

频率限制 防止多次尝试密码

传输层窃听 明文密码

密码 - 生物特征密码

  • 指纹
  • 声纹
  • 虹膜
  • 私密性 - 容易泄露
  • 安全性 - 碰撞
  • 唯一性 - 终身唯一 无法修改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: