Spring Security中 salt 的最佳使用

salt, 盐, 用来做什么? 自己搜索下吧, 不解释这个基础的问题.

Spring Security中使用salt 有以下方式:

1.不使用 salt                       (强烈不推荐)

配置如下

1

使用 sha-256 加密

 

2.使用固定的salt 值          (不推荐)

配置如下

2

此处配置的固定值: my-salt

 

3.使用UserDetails中的一个属性值, 通过反射动态获取   (推荐)

配置如下

3

使用UserDetails中的username 属性的值为salt

 

4.自己实现 SaltSource.java 类,扩展性好           (推荐)

配置如下

4

使用扩展的 MySaltSource , 自定义实现,扩展性强

 

最佳使用实践

1. 使用UserDetails 的某一属性为salt的动态值 , 但这个属性不要与用户相关(如username), 比如定义一个 saltValue 属性, 每次创建时随机生成此值并存储,不修改.

2.扩展 SaltSource.java实现 , 比如使用两种加密算法去加密等.

 

另外

1. 对password的加密使用不可逆的算法实现, 如: SHA-XXX,  MD5 , 不能使用可逆的加密, 如: AES

2. password是敏感数据, 切不可记录到日志中, 保存在许多地方等.