Cryptography 加密的过程是这样的?

编码/解码

Shiro提供了base64和16进制字符串编码/解码的API支持,方便一些编码解码操作 Base64.encodeToString(str.getBytes())编码

Base64.decodeToString(base64Encoded) 解码

散列算法

常见散列算法如MD5,SHA等

1)首先创建一个DfaultHashService,默认使用SHA-512算法;

2)可以通过hashAlgorithmName属性修改算法;

3)可以通过privateSalt设置一个私盐,其在散列时自动与用户传入的公盐混合产生一个新 盐;

4)可以通过generatePublicSalt属性在用户没有传入公盐的情况下是否生成公盐;

5)可以设置randomNumberGenerator用于生成公盐;

6)可以设置hashIterations属性来修改默认加密迭代次数;

7)需要构建一个HashRequest,传入算法、数据、公盐、迭代次数。

生成随机数

SecureRandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator();

randomNumberGenerator.setSeed(“159”.getBytes());

String hex = randomNumberGenerator.nextBytes().toHex();

加密/解密

提供对称式加密/解密算法的支持,如AES、Blowfish等

PasswordService/CredentialsMatcher

用于提供加密密码及验证密码服务

Shiro默认提供了PasswordService实现DefaultPasswordService;CredentialsMatcher实

现PasswordMatcher及HashedCredentialsMatcher(更强大)

HashedCredentialsMatcher实现密码验证服务

Shiro提供了CredentialsMatcher的散列实现HashedCredentialsMatcher,和

PasswordMatcher不同的是,它只是用于密码验证,且可以提供自己的盐,而不是随机生成 盐,且生成密码散列值的算法需要自己写,因为能提供自己的盐