一 为什么需要加密?

比如当前有个用户进行注册,他输入的账号密码是“ltl”和"123456",那么我们肯定要将账号密码保存到数据库中。在没有接触过“加密”这个概念时,我们肯定是将账号密码以明文的方式保存到user表中。那么明文存放密码会有哪些问题呢?

如果有人能看到我们的User表,那他就可以随意登录任何一个账号了。这对用户数据安全性来说是不合理的。

所以我们要将用户密码以“密文”形式保存到数据库当中。这样的话别人就算获取到了user表的信息,他也无法知道我们的密码,也就无法登录我们的用户账号。

二 加密技术有哪些需求?

1.同样的内容,每次执行加密,都会得到一样的密文字符串

用户登录时,我们需要验证用户账号及密码的正确性。但是将用户登录时输入的明文密码和数据库中的密文进行比较肯定是不相等的,所以我们要将用户登录时输入的密码也进行加密后再去和数据库中的密码比较。所以这就要求只要内容是一样的,加密后得到的密文也要是一样的。

2.加密后的密文不可逆

如果偷盗者拿到密文后,可以很轻松地就解密得到明文,那用户的数据安全性也是不合格的。所以我们至少要使得加密后的密文用一般的解密软件无法破解。

三 在java开发中通常采用哪些加密技术?

1.Md5加密

Md5加密技术可以将我们的明文密码转换成一段由32个16进制字符组成的密文字符串,例如0caa3b23b8da53f9e4e041d95dc8fa2c,然后保存到数据库中。

但实际上Md5加密也会有一些问题,我们可以看到网上有很多的Md5解密网站,只要我们粘贴密文,一键点击解密就可以得到明文字符串。那这样的话md5加密岂不是不可靠了吗?

其实是这样的,md5解密网站并非拥有直接解密md5的能力,它们只是将很多简单的字符串都进行了加密,然后保存密文到网站数据库中。当用户粘贴md5密文进行解密时,它们会去判断自己的数据库中是否有同样的密文,如果有,就直接获取到密文所匹配的那个字符串返回给用户,从而看起来像是“成功解密”了。如果我们将一段复杂密码生成的密文去解密,很多时候会发现解密失败。

2.Salt加密

上面我们谈到md5解密网站可以破解简单字符串生成的密文,所以如果用户注册时输入的是简单的密码,那它就很容易被破解。针对这个情况,我们可能会要求密码必须包含大小写字母、特殊字符等,但很多时候用户设置的密码仍然会是不够复杂的。

既然我们无法控制用户的输入,那ok,我们自己帮用户将密码改复杂!

在我们开发用户注册功能时,我们这样做。在获取到用户输入的密码后,后台生成一段”随机字符串“,我们把它称为”盐“,然后将盐插入到用户密码的某个位置,在用户自己的密码基础上得到一段”更加复杂的密码“,这就是”盐加密“,也就是Salt加密。

然后我们再将盐加密后的密码用md5生成密文,那这样的话这个密文就不是那么容易破解的了。至少在一般的解密网站都是无法被破解的了。

因此,再实际开发中,我们通常采用的就是Md5+Salt加密来保存我们的用户密码。

四 使用加密技术后,用户登录时我们如何校验用户密码是否正确?

1.只使用md5加密

当我们只使用md5加密时,那这个校验流程还是很简单的。我们只需要将用户登录时输入的密码进行md5加密,然后根据用户账号查询出数据库中的密文密码,两者比较,相同则是密码正确,否则就是密码错误。

2.md5+Salt加密

这个就比较复杂了,因为数据库中的密文是”用户密码+盐“加密后的结果,如果我们还是直接将用户登录密码加密去和数据库密文比较,肯定是不相等的。所以我们也要同样将”登录密码+盐“加密后再去和数据库比较。

但问题来了,用户注册时我们的”盐“是随机生成的,每个用户的”盐“又是不一样的,那我们怎么知道登录密码要加上什么盐呢?

其实很简单,在用户注册时,我们同时将生成的”随机盐“保存到数据库某个字段中,然后在用户登录时,我们先根据账号查询出用户的”盐“,然后将它插入到登录密码中同样的位置,得到”登录密码+盐“的字符串,再用md5加密和数据库密文比较,如果相同则密码正确,否则密码错误。

浅谈Md5+Salt加密相关推荐

  1. c语言实现md5比java难_浅谈md5弱类型比较和强碰撞

    前言 在CTF中,md5的题目太常见了,虽然有很多这方面的文章,但相对来说比较零散,这里主要将自己学习和比赛时遇到的md5弱类型和强碰撞的题目从浅到深地梳理一下. 本文涉及知识点实操练习:浅谈md5弱 ...

  2. 浅谈MD5加密算法中的加盐值(SALT)

    我们知道,如果直接对密码进行散列,那么***可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法, ...

  3. JackHttp -- 浅谈编码、加密(对称加密,非对称加密,Hash算法)

    如果你还不清楚 JackHttp 是什么,请戳这里!!! JackHttp 是一个网络框架系列,为什么还要分享编码和加密呢?主要有如下几个原因: HTTP 在网络传输过程中是明文的. HTTP 在网络 ...

  4. js压缩代码后怎么生成source map_浅谈前端代码加密

    作者简介:于航,PayPal Senior Software Engineer,在 PayPal 上海负责 Global GRT 平台相关的技术研发工作.曾任职于阿里巴巴.Tapatalk 等企业.f ...

  5. linux密码加密什么算法,浅谈系统密码加密方式

    前几天恰巧碰到不算是题目的题目吧,涉及到Win与Linux的系统密码存放问题.这里总结一下两个系统下密码加密保存方式. Windows: SAM文件一般存放在C:\Windows\System32\C ...

  6. 计算机网络:浅谈HTTPS和加密

    1. 前言 最近研究HTTPS(超文本传输安全协议),是在HTTP协议的基础上增加了一层SSL协议.SSL协议用来在客户端和服务器之间创建一个安全可靠的通信环境,那么我们要深入了解HTTP协议是如何做 ...

  7. 浅谈网络支付加密安全流程思路(安全性极高)

    在阐述我的思路之前,我们先了解以下几点. 一.公网不安全 如果我们使用公网上网,我们的ip是由公网发放的.当我们并发送请求时,公网的拥有者可以在路由端设置拦截器,以此来对你向服务器发送的数据进行拦截, ...

  8. linux内核md5,浅谈MD5及简单使用

    原理简介: MD5即Message-Digest Algorithm 5(信息-摘要算法 第5版),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又名:摘要算法.哈希算法),主流编程语言普 ...

  9. linux 目录md5校验,【我的Linux,我做主!】浅谈MD5校验文件完整一致性

    目录: (一)MD5介绍 (二)md5sum命令 (三)实战演练 (一)MD5介绍 (1.1)MD5即Message-Digest Algorithm 5(信息-摘要算法 第5版),用于确保信息传输完 ...

最新文章

  1. 基于RT-Thread开发智能视觉组智能车 - 温州大学 - 春华秋实
  2. python简单代码演示效果-演示python如何创建和使用一个简单的元类的代码
  3. linux 关闭开机 ftp,解决linux ftp匿名上传、下载开机自启问题
  4. Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境
  5. VueTreeselect出现unknown解决方法
  6. BZOJ4401: 块的计数 思维题
  7. LOL英雄联盟代打外挂程序-java实现
  8. 【依葫芦画瓢】SSM-CRUD --- 2
  9. AltiumDesigner中如何将原理图导成黑白色图
  10. 手机NFC如何格式化加密IC卡
  11. mysql如何进行数据透视_使用MySQL的数据透视表
  12. 名帖366 鲜于枢 草书《韩愈石鼓歌》
  13. lerna 生成自定义日志changelog
  14. 将一张图片的人物融入另一张图片中
  15. tushare实战分析上证综指与美债收益率的关系
  16. 永恩上线服务器维护,LOL网友爆料:劫将推出至臻皮肤,卢锡安赛娜情侣皮肤即将上线?...
  17. 进阶篇——数据库的索引
  18. win10 sdk各种版本下载地址
  19. FreeRTOS个人笔记-互斥量
  20. 在word_11.1.0版本如何删掉红色的波浪线

热门文章

  1. css样式 向下补白,CSS尺寸与补白属性-----margin和padding
  2. 青龙扩展--九章头条
  3. 汉诺塔c语言执行步骤详解,详解汉诺塔执行过程
  4. dellR730装机教程
  5. 2.《THE WISDOM OF LIFE》_叔本华
  6. 如何利用word制作三线表
  7. IIS开启伪静态后html静态页面无法访问的解决方法
  8. linux 电源管理源码分析,Linux 3.8.1 电源管理之OMAP Voltage Domain分析
  9. 网赚渠道,付费项目和免费项目,你会选择哪种网赚方式
  10. 分享99个中国风ppt,总有一款适合你