对于任何程序,密码安全的重要性不言而喻。那么软件开发者是如何保护密码安全的呢?总的来说应该保护密码的存储安全和传输安全。
1.密码有以下存储方式:
(1)明文存储。明文存储存在很大的安全隐患,严禁使用明文存储。
(2)普通MD5加密存储。MD5可以把任意长度的字符串,经过计算得到固定长度的字符串,且该计算是不可逆的(压缩造成的信息丢失)。只有在明文相同的情况下,才能得到相同的密文。MD5在一定程度上增加了密码被破解的难度。但是普通MD5也不是绝对安全的。由于一个固定的密码串得到的密文是固定的,那么把常用的密码明文和对应的密文收集并保存起来,那么像'123456','5201314'这种常用明文是不是直接就被破解了啊,这种破解方式称为撞库。
(3)MD5加盐加密存储,盐指的是随机码。同样的明文加不同的盐值得到不同的密文;每个用户的盐值是注册时系统随机生成的。所以加盐操作使密码更为复杂,从而避免了撞库的可能性。
综上,可以认为使用MD5加盐加密可以保证系统的密码存储安全。
2.密码有以下传输方式:
(1)POST请求时不加密。在传输过程中数据一旦泄露或被抓包,密码就被破解了。
(2)前后端分离,前后端使用一套固定的加密规则。前端使用JS对要提交的password字符串进行加密,后端对接收的password进行解密,拿到明文,再使用md5加盐加密的方式存到数据库。存在安全隐患,因为加密方式固定可以破解。
(3)前后端分离,前后端使用随机码加密。用户登录时,前端发送用户编号到后端;后端接收用户编号,并随机生成字符串传给前端;前端使用该串对password字段值加密后传给后端。此时还有问题,因为这个串是明文传输的,所以也没有很安全。该怎么办呢,目前能想到的解决方案是设置一个过期时间,以秒或毫秒为单位,越短越安全,但是要考虑到网络响应速度对数据传输的问题。