• 从CSDN谈百分百安全的服务端密码校验方法


    其实这个办法早已有很多技术文章讨论过,真不明白为什么国内的大大小小公司就是不愿意采用.

    我觉得,

    都不采用公认的一种百分百安全的算法就下面两个原因: 

    1. 小公司招的全是经过XX培训的小学生,不知道这个方法.

    2. 大公司出于各种目的想完全控制用户的隐私包括密码.

    除此外没有其它可能了.

    采用此最安全的服务端密码验证算法,可以完全消除服务端的密码安全隐患,期望各大大小小的公司采用或者升级:

    方法介绍: 带盐值的二次散列算法.

    步骤:

    存储:

    1. 对用户注册输入的密码进行散列(最好SHA1),得到唯一长字符串.

    2. 根据用户输入的用户名生成一个3-6位的固定字符串:盐值.

    3. 把第一步得到的散列串加上第二步得到的盐值再一次散列后得到最终散列串存储到数据库中.

    验证:

    1. 用户登录时候,根据用户名和密码按照"存储"步骤1,2,3同样的算法得到最终散列串和数据库中取出的串进行比较.

    2. 一致则登录成功,不一致则登录失败.

    找回:

    1. 用户注册时候,填写私密的三个问答.

    2. 把私密问答答案同样按照"存储"类似步骤1,2,3两次散列存储到数据库中.

    3. 用户在找回页面填写问答,同样算法得到串和数据库中注册时候串进行核对.

    4. 问答核对一致,则发邮件到用户邮箱进行密码重置.

    5. 问答核对不一致,则没有任何人任何办法知道此用户密码,请凭实名制身份证件来公司登记认领.

    6. 如果没有实名制,则此账号作废.

    用此算法,用户密码安全唯一的威胁只来自用户客户端面:

    1. 用户请求数据被劫持,可采用:HTTPS完全避免.

    2. 用户电脑中毒被木马记录键盘.

    3. 用户电脑中毒视频被控制录相.

    4. 用户被强制逼迫说出密码.

    5. 有人悄悄在你后面偷看密码.

    如有问题,请邮件: wopani@gmail.com

  • 相关阅读:
    Ngnix(三)—— window下布置nginx服务集群
    Java基础(一)—— 网络编程(一)—— Java Socket总结
    2018新浪Java笔试总结
    java yyyyMMddHHmmss格式字符串转换为yyyy-MM-dd HH:mm:ss格式字符串
    c# 返回多个参数(利用Tuple)
    c# 域名转换成ip地址
    myhaits if test判断字符串
    java中List转换成Json
    java打包发布程序.jar(Eclipse)
    redis设置密码
  • 原文地址:https://www.cnblogs.com/kcitwm/p/2299369.html
Copyright © 2020-2023  润新知