专栏首页用户8870853的专栏密码的加密加盐处理
原创

密码的加密加盐处理

1、首先介绍一下常规的登录认证(非安全性)

l 数据库表如下所示:

<form action="index.jsp" method="post"> 账 号:<input type="text" name="username"/><br/> 密 码:<input type="password" name="password"><br/><br/> <input type="submit" value="提交"><br/> </form>

l 用户通过表单提交用户名,密码两个字段查询数据库匹配,实现登录认证功能,但存在的安全隐患问题太多:

(1)数据库密码以明文的形式进行存储。

(2)数据传输的过程中未对数据进行加密处理。

2、针对以上两个问题进行分析和解决

l 安全加密:首先对数据库表的password字段进行摘要md5处理,sql语句如下:

l md5加密后的数据

l 数据库密码加密后,校验的逻辑就发生了些变化,需要对提交的密码进行加密之后再做对比,但是这样子还是不安全。

(1)通过以上步骤,我们只对数据库的password明文字段进行了简单的MD5加密,进入http://www.cmd5.com/ 输入加密后的密文进行解密后可以得到明文密码

(2)容易根据密文位数推测算法,从而使用工具破解。

(3)真实密码相同,加密过的密码也相同。

3、接下来我们介绍一下对其进行加盐处理

l 在表中添加一列salt字段(盐),内容随意输入23sd2,然后和原来的明文密码123456结合,再进行md5加密

说明:所谓的salt字段就是一个随机的字段,具体随机算法就不讨论了,每当用户注册账户时,后台就给它随机生成一个不同的字段,然后根据password和salt字段结合进行摘要处理,存在数据库表中的password字段,这样一来,原来明文都是123456生成的密文就不一样了。

以上的步骤我们只是对数据库进行了加密,为了防止用户输入密码在传输的过程中被抓包工具获取,我们还要在密码传输的过程中进行加密,这样可以使得获取到的也是密文。

4、最后介绍下BCrypt加盐加密

l 经过BCryptPasswordEncoder加密后的内容,不需要专门的salt字段存储盐,而是在密文中。

l Bcrypt有四个变量: saltRounds: 正数,代表hash杂凑次数,数值越高越安全,默认10次。 myPassword: 明文密码字符串。 salt: 盐,一个128bits随机字符串,22字符 myHash: 经过明文密码password和盐salt进行hash l 如何校验正确性 在校验时,从密文中取出盐salt,salt跟password进行hash,得到的结果跟保存在DB中的hash进行比对。 总结: l 对于用户的密码保护,数据库对敏感的字符内容一定要进行加密之后存储。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • shiro 加密登录 密码加盐处理

    一觉睡到小时候
  • 加密盐

    涉及身份验证的系统都需要存储用户的认证信息,常用的用户认证方式主要为用户名和密码的方式,为了安全起见,用户输入的密码需要保存为密文形式,可采用已公开的不可逆的h...

    黄啊码
  • 密码加盐加密与存储使用

    为防止密码泄露与轻易被暴力破解,采用hash等方式已经不再安全,可以采用如彩虹桥类似方式进行破解,

    肖哥哥
  • 为什么要在MD5加密的密码中加“盐”

    盐(Salt)在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

    bear_fish
  • 什么叫给密码“加盐”?如何安全的为你的用户密码“加盐”?

    在面对这个网络世界的时候,密码安全总是各个公司和用户都非常关心的一个内容,毕竟现在大家不管是休闲娱乐还是学习购物都是通过网上的帐号来进行消费的,所以我们通常会给...

    硬核项目经理
  • 加密就加密呗,为什么要加盐?

    大家都知道,不管什么系统,只要有用户登录模块的,必然在系统数据库中会存有用户的用户名和密码。用户名明文存储完全没有问题,这里我们就谈谈如何正确地来存储用户的密码...

    后端码匠
  • SpringSecurity中密码加盐与SpringBoot中异常统一处理

    当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异。笔者前几天刚好在负责一个项目的权限管理模块,现在权限管理模块已经做完了,我想通过5-6篇文章,来...

    江南一点雨
  • Yii2处理密码加密及验证

    在Yii2中提供了密码加密以及验证的一系列方法,方便我们的使用,它使用的是bcrypt算法。查看源码我们可以发现它使用的是PHP函数password_hash(...

    双面人
  • Yii2处理密码加密及验证的方法

    在Yii2中提供了密码加密以及验证的一系列方法,方便我们的使用,它使用的是bcrypt算法。查看源码我们可以发现它使用的是PHP函数password_hash(...

    砸漏
  • 前端动态加盐慢加密方案图解

    加密:利用某种加密算法,将明文转换成无法简单识别的密文。 解密:利用相应的解密算法,将密文转换成可识别的明文。 密码破解:1、算法逆向破解(一般算法都是不可逆的...

    IMWeb前端团队
  • 前端动态加盐慢加密方案图解

    密码破解:1、算法逆向破解(一般算法都是不可逆的);2、穷举暴力破解 3、查表,实际上表也是提前穷举跑出来的。

    IMWeb前端团队
  • webconfig 文件加密处理

    前几日正好遇到配置文件加密解密的问题,简单记录下流程。 1.首先运行cmd然后打开Framework。cd C:\Windows\Microsoft.NET\F...

    用户1217611
  • 使用密码加密

    /* 功能:使用密码加密 日期:2013-05-29 */ #include <stdio.h> #include <stdlib.h> #incl...

    WindCoder
  • 浅谈密码加密

    我们的项目如果是使用flask框架开发的话,那么可以使用flask中提供的安全模块,将密码进行加密。这样做的好处是保障用户信息安全,要不然公司内任何一个程序员都...

    小闫同学啊
  • Spring之密码加密

    爱撒谎的男孩
  • js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结

    写前端的时候,很多的时候是避免不了注册这一关的,但是一般的注册是没有任何的难度的,无非就是一些简单的获取用户输入的数据,然后进行简单的校验以后调用接口,将数据发...

    何处锦绣不灰堆
  • nodejs中的bcryptjs密码加密

    bcryptjs是一个第三方密码加密库,是对原有bcrypt的优化,优点是不需要安装任何依赖,npmjs地址为:https://www.npmjs.com/pa...

    ccf19881030
  • Java实现密码、文件MD5加密,密码sha256、sha384、sha512Hex等加密

    Java实现密码、文件MD5加密,密码sha256、sha384、sha512Hex等加密!

    业余草
  • Python之密码加密与解密

    最近在搞一个web应用的密码管理模块,里面用到了python对密码的加密解密模块,在网上搜了一下,发现这方面的加密解密例子还比较多,整理了一下思路,初步将密码管...

    AsiaYe

扫码关注云+社区

领取腾讯云代金券