一 为什么需要加密?
比如当前有个用户进行注册,他输入的账号密码是“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加密
这个就比较复杂了,因为数据库中的密文是”用户密码+盐“加密后的结果,如果我们还是直接将用户登录密码加密去和数据库密文比较,肯定是不相等的。所以我们也要同样将”登录密码+盐“加密后再去和数据库比较。
但问题来了,用户注册时我们的”盐“是随机生成的,每个用户的”盐“又是不一样的,那我们怎么知道登录密码要加上什么盐呢?文章来源:https://www.toymoban.com/news/detail-444927.html
其实很简单,在用户注册时,我们同时将生成的”随机盐“保存到数据库某个字段中,然后在用户登录时,我们先根据账号查询出用户的”盐“,然后将它插入到登录密码中同样的位置,得到”登录密码+盐“的字符串,再用md5加密和数据库密文比较,如果相同则密码正确,否则密码错误。文章来源地址https://www.toymoban.com/news/detail-444927.html
到了这里,关于浅谈Md5+Salt加密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!