Skip to content
springside edited this page Mar 11, 2012 · 5 revisions

##Overview 因为Java的Crypto API始终有点难用,SpringSide在core module中的org.springside.modules.security.utils中提供了封装。
API的出入参数都是byt[]数组,需要配合Encodes来转换成Hex或Base64存储。

##Digests消息摘要 去年一轮的密码被盗风波后,使用salt并迭代N次的sha-1式密码存储已经是标配了。
使用随机salt,是避免相同的密码的sha-1值相同,还是容易被穷举的猜到。
而迭代N次,纯粹是加大暴力破解的难度。

因此,针对字符串消息摘要API如下:

public static byte[] sha1(String input); 
public static byte[] sha1(String input, byte[] salt);
public static byte[] sha1(String input, byte[] salt, int iterations);
public static byte[] generateSalt(int numBytes);

另外,对文件内容的消息摘要,也提供了一套API。与前面的字符串处理不一样的是,它会一边8k,8k的读,一边调用digest.update(),而不是一次过digest()整个文件。

##Crypto加密 ###Hmac密钥签名 sha1,md5只是用来摘要,但因为是公开算法,人人都可以做摘要。而hmac是使用密钥的摘要,等同于 Des(sha1(input)),可以达到签名的效果。

###Des密钥加密 老牌协议了,不多说。

###Aes密钥加密 Des协议的新兴替代者。

总体来说, 使用salt并1024次迭代的sha-1, Hmac 和 Aes是平时的摘要,签名和加密的首选协议。

[返回参考手册] (https://github.com/springside/springside4/wiki/Reference)