浅谈Md5+Salt加密

这篇具有很好参考价值的文章主要介绍了浅谈Md5+Salt加密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 为什么需要加密?

比如当前有个用户进行注册,他输入的账号密码是“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加密和数据库密文比较,如果相同则密码正确,否则密码错误。文章来源地址https://www.toymoban.com/news/detail-444927.html

到了这里,关于浅谈Md5+Salt加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么需要数据仓库

    为什么不在OLTP环境下分析?  OLTP环境也会存储历史数据,但这些历史数据并不是业务运行所需的,这些历史数据需要经常归档到数据仓库,并且在OLTP数据库中删除。 相比之下,事务环境适用于连续处理事务,通常应用于订单录入以及财务和零售事务。它们并不依赖历史数据

    2024年01月25日
    浏览(62)
  • 为什么需要单元测试?

    为什么需要单元测试? 从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。 从测试人员角度而言,功能测试和系统测试以及其他性能测试等等对测试

    2024年02月12日
    浏览(64)
  • 为什么需要uboot?

    bootROM: 一种固化在芯片内部的只读存储器(ROM),用于启动和初始化系统。BootROM 中通常包含了一些预先编写好的代码,用于完成系统启动前的基本初始化和配置, 例如初始化时钟、GPIO控制器、中断控制器、存储设备(SD卡、NAND Flash、SPicy Flash)等硬件资源, 检测启动设备

    2023年04月23日
    浏览(61)
  • 为什么需要超时控制

    本文将介绍为什么需要超时控制,然后详细介绍Go语言中实现超时控制的方法。其中,我们将讨论 time 包和 context 包实现超时控制的具体方式,并说明两者的适用场景,以便在程序中以更合适的方式来实现超时控制,提高程序的稳定性和可靠性。 超时控制可以帮助我们避免程

    2024年02月03日
    浏览(52)
  • 为什么需要websocket?

    前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中。如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷。        因此,一种新的通信协议应运而生---websocket,他最大的特点就是服务端可以主动向客户端推送消息,客

    2024年02月12日
    浏览(56)
  • 为什么CPU需要时钟

    为什么CPU需要时钟这样一个概念? 什么是时钟脉冲,CPU为什么需要时钟,时钟信号是怎么产生的? 上面这个图的方波就是一个脉冲,类比于人类的脉搏跳动。一个脉冲称之为CPU的一个 时钟信号 ,或者 时钟脉冲 。一个脉冲周期就叫CPU时钟周期,一个时钟周期内时钟信号震荡一

    2023年04月11日
    浏览(49)
  • 爬虫为什么需要ip

    爬虫需要使用爬虫ip主要是为了解决以下问题: 1、反爬虫机制:许多网站会设置反爬虫机制来防止爬虫程序的访问,例如限制IP地址的访问频率、检测访问来源等。使用爬虫ip可以绕过这些限制,使得爬虫程序更难被检测到。 2、访问限制:有些网站可能会对某些地区的IP地址

    2024年02月02日
    浏览(55)
  • 爬虫时为什么需要代理?

    我们都知道爬虫时是需要代理地址介入的。使用代理可以隐藏你的真实IP地址,防止被网站封禁或限制访问。此外,代理还可以帮助你绕过地理限制,访问被封锁的网站或服务。但是请注意,使用代理也可能会带来一些风险,例如代理服务器可能会记录你的访问数据,或者代

    2024年02月06日
    浏览(52)
  • 为什么自动驾驶需要5G?

    什么叫自动驾驶? 自动驾驶分为6个等级: Level 0: 人工驾驶,无驾驶辅助系统,仅提醒。 Level 1: 辅助人工驾驶,可实现单一的车速或转向控制自动化,仍由人工驾驶(如定速巡航、ACC)。 Level 2: 部分自动驾驶,可实现车速和转向控制自动化,驾驶员必须始终保持监控(

    2024年02月08日
    浏览(61)
  • 为什么需要对相机标定?

    以下内容来自系统教程如何搞定单目/鱼眼/双目/阵列 相机标定? 点击领取相机标定资料和代码 为什么需要对相机标定? 我们所处的世界是三维的,而相机拍摄的照片却是二维的,丢失了其中距离/深度的信息。从数学上可以简单理解为,相机本身类似一个映射函数,其将输

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包