`
brofe
  • 浏览: 231794 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Acegi 各种加密方式详解

    博客分类:
  • Java
阅读更多
Acegi 对于密码提供三种方式:明文及不采用任何加密方式、MD5加密方式、哈希算法加密方式。

只需要在DAO的认证管理器中分别加入一下对应一下配置:


第一种:不使用任何加密方式的配置

<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方式加密

<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加密,并添加全局加密盐

<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加密,并添加动态加密盐
<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

<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

<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通过表单提交的用户认证信息中的密码做各种加密操作。而我们存储用户密码的时候,可以通过一下程序完成用户密码操作:

package com.brofe.acegi;

import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
import org.acegisecurity.providers.encoding.ShaPasswordEncoder;

/**
 * 本工程使用的加密方式为动态的加密盐处理加密
 * 
 * @author: brofe@163.com
 * @since: 2008-11-23
 */
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再加全局加密盐加密的方式加密 
	}

	/**
	 * 使用简单的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());
	}

	/**
	 * 使用256的哈希算法(SHA)加密
	 */
	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());
	}
	
	/**
	 * 使用SHA-256的哈希算法(SHA)加密
	 */
	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());
	}
	
	/**
	 * 使用MD5再加全局加密盐加密的方式加密 
	 */
	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());
	}
}








分享到:
评论
1 楼 brofe 2008-11-24  
上述加密程序执行出来的效果就是:

MD5: 202cb962ac59075b964b07152d234b70 len=32

哈希算法 256: a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
len=64

哈希算法 SHA-256: 40bd001563085fc35165329ea1ff5c5ecbdbbeef len=40

MD5 SystemWideSaltSource: 465da024e04f09673a968e4bd1095a99 len=32

相关推荐

    Acegi开发指南.

    ### Acegi开发指南知识点详解 #### 一、Acegi简介 **Acegi**是一个基于Spring框架的安全性解决方案,专门设计用于Web应用的安全控制。Acegi的主要优势在于它提供了一种声明式的安全控制方式,允许开发者通过配置而...

    ldap与Acegi? ----Acegi配置文件解剖

    Acegi Security(现已被Spring Security替代)是Spring Framework的一个扩展,它提供了一个全面的安全管理框架,包括访问控制、会话管理、密码加密等功能。Acegi Security允许开发者通过XML配置或者编程方式定义安全...

    springside 玩转acegi

    《玩转Acegi:SpringSide项目中的安全配置详解》 Acegi Security是Spring社区早期的安全框架,它为Spring应用提供了全面的身份验证和授权服务。在本文中,我们将深入探讨SpringSide项目中`applicationContext-acegi...

    学习Acegi-认证 文档

    ### Acegi认证服务详解 #### 一、Acegi简介与背景 Acegi是Spring Security的前身,是一款基于Spring框架的安全管理工具,旨在为应用程序提供安全控制功能,包括身份验证(Authentication)和授权(Authorization)...

    springsecurity.pdf

    ### Spring Security核心知识点详解 #### 一、Spring Security概述与整体架构 ##### 1.1 什么是Acegi Security? Acegi Security(后更名为Spring Security)是Spring框架中的一个子项目,专注于提供强大的安全性...

    jsecurity 资料

    2. **核心组件详解**:详细介绍认证、授权、会话管理和加密服务的工作原理和配置方法。 3. **安全配置**:示例展示如何设置访问控制规则,包括URL过滤、方法级别的权限控制等。 4. **自定义扩展**:说明如何根据需求...

    java文集

    映射标记 Java的“静态库链接” 姚博文 集成ACEGI 进行权限控制 SWT可交互式Browser控件 JDK配置(注意) RIA简介(第一部分) 在 Eclipse 中嵌入 NASA World Wind Java SDK, 用3DES加密解密 ...

    Packtpub.Spring.Security.3.May.2010.(PDF && CODE)

    它不仅覆盖了用户认证,还包括了授权、访问控制、加密以及会话管理等多个方面。在本教程中,读者将了解到如何利用Spring Security来构建安全的Java Web应用。 1. **基础概念**:首先,教程会介绍Spring Security的...

    xfire spring security

    《xfire与Spring Security整合实现WS-Security安全认证详解》 在现代企业级应用开发中,安全性是不可或缺的重要环节。Spring Security作为Java领域的安全框架,提供了全面的身份验证和授权服务。而Xfire(现已被...

    基于SSH的在线Java程序设计学习平台。学生管理系统(其主要内容包括用户的注册、不同用户身份验证登录、信息维护.zip

    **基于SSH的在线Java程序设计学习平台:学生管理系统详解** SSH(Struts+Spring+Hibernate)是Java开发中常见的三大框架组合,它们分别负责表现层、业务层和持久层的管理,为构建复杂的Web应用程序提供了强大的支持...

    spring 安全文档 PDF

    ### Spring安全核心知识点详解 #### 一、Spring Security概述与入门 ##### 1.1 什么是Spring Security? Spring Security是Spring框架的一个扩展模块,提供了一套全面的安全解决方案,旨在为基于Java的应用程序...

Global site tag (gtag.js) - Google Analytics