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