- Introduction
- Quick Start
- Design
- Tutorial
- Spring MVC
- JSP/JSTL/Servlet
- JQuery and plugins
- Ajax
- Twitter Bootstrap CSS
- SiteMesh
- YUICompressor
- Spring Restful Service
- JAX-WS/CXF
- Spring Data JPA
- JPA/Hibernate
- MyBatis
- Database
- H2 Database
- Datasource
- Transaction
- Redis
- Cache Overview
- Guava Cache
- Ehcache
- Memcached
- Shiro Security
- Crypto
- Schedule/Quartz
- Jmx
- System Protection
- Hystrix
- Rate Limiter
- Monitoring and Metrics
- Metrics-library
- Graphite
- Logging/Slf4j/Logback
- Logstash
- Spring
- Validation Overview
- JQuery Validation
- Hibernate Validator
- General Utilizes
- JSON/JAXB
- Date
- Test Overview
- Unit Test/Mockito/AssertJ
- Selenium2
- BDD
- Performace-test
- JMeter
- Profiler
- Simulator Overview
- Nodejs
- Eclipse
- Maven
- Sonar
- git
- Travis CI
- Jetty
- Micro-Service Architecture/Executable War
- AssertJ
- CreateNewProject
- Dozer
- Graphite-Windows
- Hello-Everybody
- Jaxb
- Json
- Mock
Crypto
Overview
因为Java的Crypto API始终有点难用,SpringSide在core module中的org.springside.modules.security.utils中提供了封装。
API的出入参数都是byte[]数组,需要配合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)),可以达到签名的效果,保证是你自己签的。 HmacSha1Key的默认长度是160字节。
public static byte[] hmacSha1(byte[] input, byte[] key);
public static boolean isMacValid(byte[] expected, byte[] input, byte[] key);
public static byte[] generateHmacSha1Key();
AES密钥加密
是DES协议的替代者,解决了DES中的不少问题,比如DES的Key长度只有64字节,3DES也只有128, 而AES可以是是128,192和256。
和Hash中的salt值一样,AES中也有一个IV(初始向量)的概念,使得相同的明文会加密出不同的密文。不过要使用IV,就不能使用默认的EBC分组方式,加密算法要从"AES"改为"AES/CBC/PKCS5Padding"。
public static byte[] aesEncrypt(byte[] input, byte[] key)
public static byte[] aesEncrypt(byte[] input, byte[] key, byte[] iv)
public static String aesDecrypt(byte[] input, byte[] key)
public static String aesDecrypt(byte[] input, byte[] key, byte[] iv)
public static byte[] generateAesKey()
public static byte[] generateIV()
总结
总体来说, 使用salt并1024次迭代的sha-1, Hmac 和 Aes分别是摘要,签名和加密的首选协议。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论