1、spring自带的加密算法,可以设置base64,也可以用盐值,例如:
|
1
2
3
4 |
// MD5加密类 Md5PasswordEncoder md5 = new
Md5PasswordEncoder(); // 密码密文 return
md5.encodePassword(str, null); |
2、下面是关于spring security的加密文章。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165 |
Acegi 对于密码提供三种方式:明文及不采用任何加密方式、MD5加密方式、哈希算法加密方式。只需要在DAO的认证管理器中分别加入以下对应配置:第一种:不使用任何加密方式的配置Java代码 <bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService"
ref="userDetailsService"
/> <!-- 明文加密,不使用任何加密算法, 在不指定该配置的情况下,Acegi默认采用的就是明文加密 --> <!-- <property name="passwordEncoder"> <bean class="org.acegisecurity.providers.encoding.PlaintextPasswordEncoder"> <property name="ignorePasswordCase"
value="true"></property> </bean> </property> --> </bean> 第二种:MD5方式加密Java代码 <bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService"
ref="userDetailsService"
/> <property name="passwordEncoder"> <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder"> <!-- false
表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true
表示:生成24位的Base64版 --> <property name="encodeHashAsBase64"
value="false"
/> </bean> </property> </bean> 第三种:使用MD5加密,并添加全局加密盐Java代码 <bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService"
ref="userDetailsService"
/> <property name="passwordEncoder"> <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder"> <property name="encodeHashAsBase64"
value="false"
/> </bean> </property> <!-- 对密码加密算法中使用特定的加密盐及种子 --> <property name="saltSource"> <bean class="org.acegisecurity.providers.dao.salt.SystemWideSaltSource"> <property name="systemWideSalt"
value="acegisalt"
/> </bean> </property> </bean> 第四种:使用MD5加密,并添加动态加密盐Java代码 <bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService"
ref="userDetailsService"
/> <property name="passwordEncoder"> <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder"> <property name="encodeHashAsBase64"
value="false"
/> </bean> </property> <!-- 对密码加密算法中使用特定的加密盐及种子 --> <property name="saltSource"> <!-- 通过动态的加密盐进行加密,该配置通过用户名提供加密盐, 通过UserDetails的getUsername()方式 --> <bean class="org.acegisecurity.providers.dao.salt.ReflectionSaltSource"> <property name="userPropertyToUse"
value="getUsername"
/> </bean> </property> </bean> 第五种:使用哈希算法加密,加密强度为256Java代码 <bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService"
ref="userDetailsService"
/> <property name="passwordEncoder"> <bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder"> <constructor-arg value="256"
/> <property name="encodeHashAsBase64"
value="false"
/> </bean> </property> </bean> 第六种:使用哈希算法加密,加密强度为SHA-256Java代码 <bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService"
ref="userDetailsService"
/> <property name="passwordEncoder"> <bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder"> <constructor-arg value="SHA-256"
/> <property name="encodeHashAsBase64"
value="false"
/> </bean> </property> </bean> 上述配置只是在Acegi通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:Java代码 package
com.brofe.acegi; import
org.acegisecurity.providers.encoding.Md5PasswordEncoder; import
org.acegisecurity.providers.encoding.ShaPasswordEncoder; public
class TestPasswordEncoder { public
static void
main(String[] args) throws
Exception { md5(); // 使用简单的MD5加密方式 sha_256(); // 使用256的哈希算法(SHA)加密 sha_SHA_256(); // 使用SHA-256的哈希算法(SHA)加密 md5_SystemWideSaltSource(); // 使用MD5再加全局加密盐加密的方式加密 } public
static void
md5() { Md5PasswordEncoder md5 = new
Md5PasswordEncoder(); // false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true 表示:生成24位的Base64版 md5.setEncodeHashAsBase64(false); String pwd = md5.encodePassword("123", null); System.out.println("MD5: "
+ pwd + " len="
+ pwd.length()); } public
static void
sha_256() { ShaPasswordEncoder sha = new
ShaPasswordEncoder(256); sha.setEncodeHashAsBase64(false); String pwd = sha.encodePassword("123", null); System.out.println("哈希算法 256: "
+ pwd + " len="
+ pwd.length()); } public
static void
sha_SHA_256() { ShaPasswordEncoder sha = new
ShaPasswordEncoder(); sha.setEncodeHashAsBase64(false); String pwd = sha.encodePassword("123", null); System.out.println("哈希算法 SHA-256: "
+ pwd + " len="
+ pwd.length()); } public
static void
md5_SystemWideSaltSource () { Md5PasswordEncoder md5 = new
Md5PasswordEncoder(); md5.setEncodeHashAsBase64(false); // 使用动态加密盐的只需要在注册用户的时候将第二个参数换成用户名即可 String pwd = md5.encodePassword("123", "acegisalt"); System.out.println("MD5 SystemWideSaltSource: "
+ pwd + " len="
+ pwd.length()); } } |
原文:http://www.cnblogs.com/xuzhenmin/p/3564516.html