首页 > 其他 > 详细

spring加密

时间:2014-02-25 11:39:54      阅读:384      评论:0      收藏:0      [点我收藏+]

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>  
 
第五种:使用哈希算法加密,加密强度为256
 
 
Java代码
<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-256
 
 
Java代码
<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());   
    }   
}  

spring加密

原文:http://www.cnblogs.com/xuzhenmin/p/3564516.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!