首页 > 基于哈希算法的web账户口令存储方法

基于哈希算法的web账户口令存储方法

  web账户的口令不能直接明文存储,这样太不安全了,需要加密存储。

  1. 存储策略—— 基于安全哈希算法加密存储用户的口令

  估计基于安全哈希算法的存储方式应该已经广泛使用了,不过奇怪的是网上难以找到相关应用的详细资料。哈希算法可用于保障信息的完整性、抗抵赖性, 属于单向算法,即便哈希的结果被截获,对方也是无法还原出明文的。如果在哈希的过程中加入盐值,那就更好了,可以起到混淆的作用。盐值这个概念找不到定义,大概是指用户间相互不同的信息,常见的用户名、用户邮箱、账号注册时间等。

  类似地,选择基于哈希的消息认证码(HMAC)也可用于身份认证,安全性更强,如果各位对单纯的hash不放心,可以使用HMAC。

  也有资料提到通过非对称加密算法加密后存储,比如RSA,个人觉得这种方法的安全性不如哈希算法,使用起来也麻烦,需考虑系统后台的密钥管理,而一旦密钥泄露,所以信息也就都白加密了。

  2. 算法的选择

  哈希算法有很多,常见的有MD5和SHA系列。现在有个叫彩虹表的东西,穷举某个哈希值所对应的明文,导致了MD5和SHA-1已经不再安全。而SHA-256或SHA-512目前还是比较安全的,而且计算消耗的资源不会比MD5或SHA-1差太多。从代码实现的角度考虑,各算法的参数都一样,返回值类型也一样,只是函数名和返回值长度变了,所以如果已使用了MD5或SHA-1,可很方便地切换到更安全的算法上。

   3. 添加盐值

  以盐值为用户名,算法为SHA-256为例,用户最终存储在后台的口令就可以为SHA256(" 用户名+口令 " )。而登陆的时候,有两种验证策略:

  • 可在客户端计算出SHA256("输入的用户名+输入的口令"),将计算的结果明文传输给服务端,由服务端比较该值与后台数据库中存储的是否相同。
  • 将输入的用户名,口令加密传输到服务端,在服务端计算 SHA256("输入的用户名+输入的口令"),再与数据库存储的内容做比较。加密传输现在比较流行的方法是HTTPS,这里就不多说了。

  可以看到,服务端是不知道用户的口令明文是什么,所以即便数据库攻破,也不会泄露用户的口令。

  再说说添加盐值的好处。大家都知道,最常见的口令是123456,假设有100个用户都这么设置了,那么如果不加盐值,这100个用户后台加密存储的口令就一摸一样了,这就是一个安全隐患。加了盐值还可以增加彩虹表碰撞的难度,就算用户使用了最简单的口令,加了盐值后也还是难以破解的。

  盐值最好选择用户注册后,就不会再改变的信息,或是由这些信息计算后的另一个值。比如,如果盐值设置成了用户邮箱,那就要确保这个邮箱不能修改,否则一旦邮箱改了,HASH("新邮箱+口令")≠ HASH("旧邮箱+口令") ,从而用户改了邮箱就不能再登录了。

转载于:https://www.cnblogs.com/todsong/archive/2012/04/22/2465178.html

更多相关:

  • 1、窃听入侵者搭线窃听,试图从正在进行的通信中获得有用的信息。 2、重放入侵者记录过去通信中的消息并在以后的通信中重放它们。 3、中间人攻击入侵拦截各主体之间的消息,并用自己的消息来取代它们。在向服务器发送的消息中他假冒用户的身份,同样,在向用户发送的消息中他假冒服务器的身份。 4、口令猜测攻击假设入侵者拥有一个相对较小的口令字典,其...

  •   同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API。  在微信小程序中,我们往往需要获取用户的身份信息,比如昵称、头像、性别、地区等。要得到这些信息,就需要我们调用获取用户信息的api了。在小程序中,微信非常重视对用户隐私的保护,因此有很多关于获取用户信息的...

  • UTRAN接口的通用协议模型如下图: 通俗地讲,通讯网络由终端(terminal)、连接(links)、网络节点(nodes)组成, links将nodes 关联起来。源终端(MO)发送的消息是怎样才能到目的终端(MT)呢? 消息经过links 和nodes,直至到达MT,其中关键是nodes怎么路由(route)消息到最终...

  •        Linux是一个多用户的操作系统,用户要使用该系统,首先必须登录系统,使用完系统后,必须退出系统。用户登录系统时,为了使系统能够识别自己,必须输入用户名和密码,经系统验证无误后方能进入系统。在系统安装过程中可以创建两种帐号:        1、root--超级用户帐号,使用这个帐号可以在系统中做任何事情。      ...

  • 1.用户基本概述 1.1.什么是用户? 用户指的是能够正常登录Linux或Windows系统(可以理解为你租了房⼦,能够正常入驻) F:那Linux与Windows系统的用户有什么区别? Q:本质都是登陆系统,只不过Linux⽀持多个用户 同时登陆。 F:难道Windows就不算多用户操作系统吗? Q:其实不是,在Windows...

  • 背景信息 用户通过Telnet登录设备时,设备上必须配置验证方式,否则用户无法成功登录设备。设备支持不认证、密码认证和AAA认证三种用户界面的验证方式,其中AAA认证方式安全性最高。 采用AAA本地认证方式实现用户通过Telnet登录设备的身份认证,设备上需要开启Telnet服务,将用户界面(以VTY用户界面为例)的验证方式设...

  • Bigtable 可以说是log-structed以及page-oriented 两种存储引擎的整合体,我们性能优越的单机存储引擎leveldb和rocksdb就是基于google的bigtable存储系统实现的。 论文地址Bigtable: A Distributed Storage System for Structured Da...

  • 一下为个人结合其他人对分布式存储 所需的技能进行总结,绘制成如下图谱,方便针对性学习。 这里对分布式存储系统接触较多的是ceph,所以在分布式存储系统分支上偏向ceph的学习。 如有分类有问题或者分支不合理,欢迎大家批评指正,目的是为了大家共同提升 文章目录分布式存储技能树Linux操作系统文件系统I/O系统I/O追踪内存管理Pag...

  • 存储过程存储过程分为系统存储过程和自定义存储过程存储过程通过将处理数据的程序从客户端应用程序移动到服务器,存储过程是放在服务器上的,通过客户端下达指令调用存储过程的时候,这个过程是在服务器上发生的,自然就不会占用网络的带宽就会降低网络流量。存储过程就是一组为了完成特定功能的T-SQL语句...

  • 原文地址:https://github.com/jaywcjlove/handbook/blob/master/MySQL/MySQL%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.md MySQL数据类型 数字类型 整数: tinyint、smallint、mediumint、int、bigint浮点数:...

  • 为什么要用存储过程   几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM 项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是 DBA,以前的项目都没有用到存储,不照样运行的好好的? 存储过程真的那么重要吗,它到底有什么好处呢? 笔者认为,存储过程说白了就是一堆 SQL 的合并。...