作为一名Web开发人员,我们经常需要与用户的帐号系统打交道。帐号系统中最重要的一个方面就是如何保护用户的密码。用户帐号数据库频繁被黑,所以 Web开发人员必须采取一些措施来保护用户密码,以免网站不断地被攻陷,通过对密码加盐(混入随机字符拼接在密码明文中)之后加密,可以增加系统复杂度,得到更强更安全的密文摘要值。

常规的登录认证(不安全)

通常我们在用户通过表单提交用户名,密码两个字段查询数据库匹配,实现登录认证功能,但存在的安全隐患问题太多:

(1)数据库密码以明文的形式进行存储。(2)数据传输的过程中未对数据进行加密处理

加盐加密详细介绍(密码的加密加盐处理详解)(1)

使用md5、SHA256 、 SHA512等加密哈希函数

数据库密码加密后,校验的逻辑就发生了些变化,需要对提交的密码进行加密之后再做对比,但是这样子还是不安全,有很多方法可以从简单的哈希值中快速恢复出明文的密码。有几种易于实施的技术,使这些“破解”的效率大为降低。网上有这种专门破解MD5的网站,只需提交一个哈希值,不到一秒钟就能得到破解的结果。显然,单纯的对密码进行哈希加密远远达不到我们的安全要求

加盐处理

password:明文密码

salt: 盐,一个128bits随机字符串,22字符

public static final String encryptPassword(String password, String salt) { //加密方式 String hashAlgorithmName = "SHA1"; //盐:为了即使相同的密码不同的盐加密后的结果也不同 ByteSource byteSalt = ByteSource.Util.bytes(salt); //密码 Object source = password; //加密次数 int hashIterations = 1024; SimpleHash result = new SimpleHash(hashAlgorithmName, source, byteSalt, hashIterations); return result.toString(); }

加盐的注意事项

1)、盐值不能太短;

2)、盐值不能固定;

3)、每一次修改密码重新计算hash值时,要重新生成新的盐值,不要使用上次密码对应的盐值

以上的步骤我们只是对数据库进行了加密,为了防止用户输入密码在传输的过程中被抓包工具获取,我们还要在密码传输的过程中进行加密,这样可以使得获取到的也是密文。

,