需求:客户在前端输入账号密码,我们需要利用js给密码加密之后发送到后端。这样,在这个发送过程中,如果密码被窃取了,窃取的人也得不到真实的密码。
技术基础:md5加密密码【单向加密,不可逆】
操作:这样,我们可以在用户注册的时候,把这个加密的字符串放到数据库,以后用户每一次登录,我们都可以利用加密后的字符串和数据库中的字符串进行比对。
优点:在前端对密码进行了加密,窃取到密码的人,无法得知密码明文
缺点:密码永远也无法找回,就像qq密码一样,只能覆盖
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>查询信息</title>
<!--需要导入jquery.js和md5.js文件-->
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript" src="../js/jquery.md5.js"></script>
</head>
<body>
<input type="password" id="password"/>
<script type="text/javascript">
function show()
{
//获得前端文本输入框密码的值
var password = document.getElementById("password").value;
//利用md5对字符串进行加密
var passwd = $.md5(password);
//测试结果
alert(passwd);
}
</script>
<input type="button" onclick="show()" value="测试"/>
</body>
</html>
还有一个网站,声称破解了MD5算法
https://www.cmd5.com/
还挺有意思,试过了几个,都能还原出来,据说是用了穷举的办法。
既然这样,我们可以,利用一次MD5之后,加上特殊字符串,再MD5,再反转大小写什么的,再MD5,就会加大破解难度。
不过,如果有人真的想要盗取明文,这个加密作用几乎为0,因为,你的无论是拼接字符串,大小写转化,还是多次MD5,你总得体现在前端的js代码里。别人就能看到,能看到,就还是有办法还原你的明文【假设MD5已经可以逆向的情况】
问题一:为什么我输入的字符串不同,结果加密后的字符串是一致的?
极有可能是你在获取前端文本输入框的时候获得的是文本输入框的对象,而不是文本输入框中的值
问题二:前端加密,有意义?
我不知道有没有意义,陷入了迷惑之中。
没意义?它又确确实实加密了,别人不能获取密码的原文
有意义?如果别人获取了加密后的字符串,然后发送到数据库进行比对,其实也是一样的结果【数据库会通过】专业点,叫做伪造请求登录系统
没意义?,加密了别人不能获取密码明文,降低了这个客户只有一个密码而造成对个其他账户的被攻破的风险
有意义?不是为了完全阻挡攻击,而是为了提高攻击的成本,降低被攻下的概率。
需要导入的两个js文件我已经上传到我的博客,大家看可以找找怎么下载。不用积分的,随便玩玩而已,我不是专门搞这个的。有大佬有什么更有深度的想法也可以说出来分享下。