zoukankan      html  css  js  c++  java
  • 密码安全

    密码安全

    密码的作用---证明是你
    密码的存储
    密码的传输
    密码的替代方案
    生物特征密码的问题

    密码-泄露渠道

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

    密码-存储

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

    密码-哈希算法

    • 明文-密文---一一对应
    • 雪崩效应
    • 密文明文 无法反推
    • 密文固定长度
    • 常见哈希算法:md5,sha1,sha256

    加密次数越多,复杂度越大,就越可以对抗彩虹表

    密码-变换次数越多越安全

    • 加密成本几乎不变(生成密码时速度慢一些,但对破解者是致命的)
    • 彩虹表失效(数量太大,无法建立通用性)
    • 解密成本增大 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()*99999+''+new Data().getTime());
    }
    
    password.encryptoPassword = function(salt, password) {
        return md5(salt + 'af@#$%^asda&' + password);
    }
    module.exports = password;
    

    密码验证

    // 如果用户没有salt,需要升级
    if (!user.salt) {
      var salt = password.getSalt();
      var newPassword = password.encryptPassword(salt, user.password);
      await query(
        `update user set password = '$(newPassword)', salt = '${salt} where id = ${user.id}'`
      );
      user.salt = salt;
      user.password = newPassword;
    }
    var encryptPassword = password.encryptPassword(user.salt, data.password);
    if (encryptPassword !== user.password) {
      throw new Error("密码不正确");
    }
    

    密码传输的安全性

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

    在前端加密需要安装js-md5模块,运行jspm install node:js-md5

    前端进行加密,这是前后端要有相同的盐 SUGAR

    var SUGAR = "!@#¥@#@¥#¥%GDF456¥%";
    daat.password = md5(data.username + SUGAR + data.password);
    
    var password = {};
    var md5 = function(str) {
        var crypto = require('crypto');
        var md5Hash = crypto.createHash('md5');
        md5Hash.update(str);
        return md5Hash.digest('hex');
    };
    
    password.getPasswordFromText = function(username, password) {
       var SUGAR = '!@#¥@#@¥#¥%GDF456¥%';//与前端一致
       return md5(username+ SUGAR + password);
    };
    
    password.getSalt = function() {
        return md5(Math.random()*99999+''+new Data().getTime());
    }
    
    password.encryptoPassword = function(salt, password) {
    
        return md5(salt + 'af@#$%^asda&' + password);
    }
    module.exports = password;
    
    if (!user.salt) {
      var salt = password.getSalt();
      var newPassword = password.getPasswordFromText(user.username, user.password);
      var encryptedPassword = password.encryptPassword(salt, newPassword);
      await query(
        `update user set password = '$(newPassword)', salt = '${salt} where id = ${user.id}'`
      );
      user.salt = salt;
      user.password = encryptedPassword;
    }
    var encryptPassword = password.encryptPassword(user.salt, data.password);
    if (encryptPassword !== user.password) {
      throw new Error("密码不正确");
    }
    

    生物特征密码

    • 指纹(唇纹)
    • 声纹
    • 虹膜
    • 人脸

    生物特征密码

    • 私密性-容易泄露
    • 安全性-碰撞
    • 唯一性-终身唯一无法修改
  • 相关阅读:
    【leetcode】Binary Search Tree Iterator
    【leetcode】Palindrome Partitioning II
    【leetcode】Best Time to Buy and Sell Stock III
    【leetcode】Best Time to Buy and Sell Stock II
    【leetcode】Longest Consecutive Sequence
    【leetcode】Factorial Trailing Zeroes
    【leetcode】Simplify Path
    【leetcode】Generate Parentheses
    【leetcode】Combination Sum II
    【leetcode】Combination Sum
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12245919.html
Copyright © 2011-2022 走看看