前言
在涉及数据在网络上的传输时,都要将明文数据加密传输,并且通常情况下的加密都是不可逆的
编码与解码
shiro内部提供了base64和16进制字符串编码/解码的API支持,如下
base64编码/解码
|
|
输出结果:
MTIzNDU2
123456
true
16进制字符串编码/解码
输出结果:
313233343536
123456
true
byte与string编码/解码
输出结果
[B@cd51c3
123456
散列算法
该算法是一种不可逆的算法,如MD5,SHA等,一般该算法最好需要提供一个salt(盐)来增加破解难度,一般情况下的盐被设置为 密码+用户名+盐,这样只有系统知道盐值,更难被破解
MD5散列
这里的2是散列次数,即迭代多少次,这里是2次
556b1a232d4d63a2f3ab87c9535abe25
其它散列
相应的输入结果:
5715790a892990382d98858c4aa38d0617151575
3e64afa1cb7d643aa36f63b8d092ad76b1f04ff557abbb3d05f5b9037abf68a6606a8885d51bec8f6f39ee7d0badd504241c3704e777a51c21a9723e285fb9b8
通用散列
其中第一个参数指定采用哪种算法
输出结果:
5715790a892990382d98858c4aa38d0617151575
默认匹配
Shiro提供了HashService,默认提供了DefaultHashService实现。
先来看下它的构造函数
加密与解密
Shiro还提供对称式加密/解密算法的支持,如AES、Blowfish等
AES算法
而上面的key就相当于一把钥匙,只有了这把钥匙,就能解密
输出结果:
javax.crypto.spec.SecretKeySpec@176a4
a316645482dff96d9c86c64adabc51dee5170232365a3c15dab941dc6b73c2ec
zwl
Blowfish算法
输出结果:
javax.crypto.spec.SecretKeySpec@d97afa5c
8e7f6626884b7b429a1000286f4990a4
zwl
PasswordService/CredentialsMatcher
在用户输入明文密码时,shiro默认的实现方式如下
Shiro默认提供了PasswordService实现DefaultPasswordService;CredentialsMatcher实现PasswordMatcher及HashedCredentialsMatcher
关于shiro的编码\加密是在是丰富多多彩,一般是学习中遇到采取查询相关的
一个对称加密的算法
下面是在一个项目中使用到的工具类