`
xinlanzero
  • 浏览: 246013 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

(转)Acegi 各种加密方式详解

    博客分类:
  • J2EE
阅读更多

Acegi 对于密码提供三种方式:明文及不采用任何加密方式、MD5加密方式、哈希算法加密方式。
只需要在DAO的认证管理器中分别加入一下对应一下配置:
第一种:不使用任何加密方式的配置

Java代码
  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">   
  2.     <property name="userDetailsService" ref="userDetailsService" />   
  3.   
  4.     <!-- 明文加密,不使用任何加密算法, 在不指定该配置的情况下,Acegi默认采用的就是明文加密 -->   
  5.     <!--   
  6.     <property name="passwordEncoder">   
  7.         <bean class="org.acegisecurity.providers.encoding.PlaintextPasswordEncoder">     
  8.                 <property name="ignorePasswordCase" value="true"></property>     
  9.         </bean>   
  10.     </property>   
  11.     -->   
  12. </bean>  


第二种:MD5方式加密

Java代码
  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">   
  2.     <property name="userDetailsService" ref="userDetailsService" />   
  3.   
  4.     <property name="passwordEncoder">   
  5.         <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">   
  6.             <!-- false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true  表示:生成24位的Base64版 -->   
  7.             <property name="encodeHashAsBase64" value="false" />   
  8.         </bean>   
  9.     </property>   
  10. </bean>  


第三种:使用MD5加密,并添加全局加密盐

Java代码
  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">   
  2.     <property name="userDetailsService" ref="userDetailsService" />   
  3.   
  4.     <property name="passwordEncoder">   
  5.         <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">   
  6.             <property name="encodeHashAsBase64" value="false" />   
  7.         </bean>   
  8.     </property>   
  9.   
  10.     <!-- 对密码加密算法中使用特定的加密盐及种子 -->   
  11.     <property name="saltSource">   
  12.         <bean class="org.acegisecurity.providers.dao.salt.SystemWideSaltSource">   
  13.             <property name="systemWideSalt" value="acegisalt" />   
  14.         </bean>   
  15.     </property>   
  16. </bean>  


第四种:使用MD5加密,并添加动态加密盐

Java代码
  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">   
  2.     <property name="userDetailsService" ref="userDetailsService" />   
  3.   
  4.     <property name="passwordEncoder">   
  5.         <bean class="org.acegisecurity.providers.encoding.Md5PasswordEncoder">   
  6.             <property name="encodeHashAsBase64" value="false" />   
  7.         </bean>   
  8.     </property>   
  9.   
  10.     <!-- 对密码加密算法中使用特定的加密盐及种子 -->   
  11.     <property name="saltSource">   
  12.         <!-- 通过动态的加密盐进行加密,该配置通过用户名提供加密盐, 通过UserDetails的getUsername()方式 -->   
  13.          <bean class="org.acegisecurity.providers.dao.salt.ReflectionSaltSource">   
  14.             <property name="userPropertyToUse" value="getUsername" />   
  15.          </bean>   
  16.     </property>   
  17. </bean>  


第五种:使用哈希算法加密,加密强度为256

Java代码
  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">   
  2.     <property name="userDetailsService" ref="userDetailsService" />   
  3.   
  4.     <property name="passwordEncoder">   
  5.         <bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder">   
  6.             <constructor-arg value="256" />   
  7.             <property name="encodeHashAsBase64" value="false" />   
  8.         </bean>   
  9.     </property>   
  10. </bean>  

第六种:使用哈希算法加密,加密强度为SHA-256

Java代码
  1. <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">   
  2.     <property name="userDetailsService" ref="userDetailsService" />   
  3.   
  4.     <property name="passwordEncoder">   
  5.         <bean class="org.acegisecurity.providers.encoding.ShaPasswordEncoder">   
  6.             <constructor-arg value="SHA-256" />   
  7.             <property name="encodeHashAsBase64" value="false" />   
  8.         </bean>   
  9.     </property>   
  10. </bean>  

上述配置只是在Acegi通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:

Java代码
  1. package com.brofe.acegi;   
  2.   
  3. import org.acegisecurity.providers.encoding.Md5PasswordEncoder;   
  4. import org.acegisecurity.providers.encoding.ShaPasswordEncoder;   
  5.   
  6.   
  7. public class TestPasswordEncoder {   
  8.   
  9.     public static void main(String[] args) throws Exception {   
  10.            
  11.         md5(); // 使用简单的MD5加密方式   
  12.            
  13.         sha_256(); // 使用256的哈希算法(SHA)加密   
  14.            
  15.         sha_SHA_256(); // 使用SHA-256的哈希算法(SHA)加密   
  16.            
  17.         md5_SystemWideSaltSource(); // 使用MD5再加全局加密盐加密的方式加密    
  18.     }   
  19.   
  20.       
  21.     public static void md5() {   
  22.         Md5PasswordEncoder md5 = new Md5PasswordEncoder();   
  23.         // false 表示:生成32位的Hex版, 这也是encodeHashAsBase64的, Acegi 默认配置; true  表示:生成24位的Base64版   
  24.         md5.setEncodeHashAsBase64(false);   
  25.         String pwd = md5.encodePassword("123"null);   
  26.         System.out.println("MD5: " + pwd + " len=" + pwd.length());   
  27.     }   
  28.   
  29.       
  30.     public static void sha_256() {   
  31.         ShaPasswordEncoder sha = new ShaPasswordEncoder(256);   
  32.         sha.setEncodeHashAsBase64(false);   
  33.         String pwd = sha.encodePassword("123"null);   
  34.         System.out.println("哈希算法 256: " + pwd + " len=" + pwd.length());   
  35.     }   
  36.        
  37.       
  38.     public static void sha_SHA_256() {   
  39.         ShaPasswordEncoder sha = new ShaPasswordEncoder();   
  40.         sha.setEncodeHashAsBase64(false);   
  41.         String pwd = sha.encodePassword("123"null);    
  42.         System.out.println("哈希算法 SHA-256: " + pwd + " len=" + pwd.length());   
  43.     }   
  44.        
  45.       
  46.     public static void md5_SystemWideSaltSource () {   
  47.         Md5PasswordEncoder md5 = new Md5PasswordEncoder();   
  48.         md5.setEncodeHashAsBase64(false);   
  49.            
  50.         // 使用动态加密盐的只需要在注册用户的时候将第二个参数换成用户名即可   
  51.         String pwd = md5.encodePassword("123""acegisalt");   
  52.         System.out.println("MD5 SystemWideSaltSource: " + pwd + " len=" + pwd.length());   
  53.     }   
  54. }  
分享到:
评论

相关推荐

    Acegi学习笔记--Acegi详解实战Acegi实例

    Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解

    Acegi安全系统详解.doc

    Acegi安全系统详解,介绍安全认证框架,用户认证,权限控制等

    acegi

    acegi,acegi,acegi

    Acegi安全系统详解

    Acegi是Spring Framework 下最成熟的安全系统,它提供了强大灵活的企业级安全服务,如: 1 : 完善的认证和授权机制, 2 : Http资源访问控制, 3 : Method调用访问控制, 4 : Access Control List (ACL) 基于对象...

    springside 玩转acegi

    applicationContext-acegi-security.xml acegi配置文件 博文链接:https://yahaitt.iteye.com/blog/143432

    ACEGI

    不错的ACEGI 教程

    spring acegi 详细文档

    Acegi文档 spring acegi 详细文档

    acegi使用说明acegi原理及如何与spring、hibernate结合

    它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 安全涉及到两个不同的概念,认证和授权。前者是关于...

    acegi安全框架简介

    它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 安全涉及到两个不同的概念,认证和授权。前者是关于...

    Acegi框架介绍 acegi安全与认证

    acegi 框架 介绍 spring 安全

    Acegi-spring安全框架

    Acegi能做什么 Acegi的体系结构 Acegi核心组件 典型的web认证过程 Acegi的登陆认证 Acegi对安全对象的访问控制 Filter 组件 Acegi的不足之处

    acegi-security 1.0.2

    acegi-security 1.0.2.jar

    acegisecurity内所有jar包

    包含acegi-security-1.0.7.jar,acegi-security-1.0.7-sources.jar,acegi-security-cas-1.0.7.jar,acegi-security-cas-1.0.7-sources.jar,acegi-security-catalina-1.0.7.jar,acegi-security-catalina-1.0.7-...

    acegi-src1.0.5

    acegi,spring的安全验证框架

Global site tag (gtag.js) - Google Analytics