评论走起

在Java中使用HMAC加密算法

HMAC 算法主要应用于身份验证,用法如下: 1.客户端发出登录请求 2.服务器返回一个随机值,在会话记录中保存这个随机值 3.客户端将该随机值作为密钥,用户密码进行 hmac 运算,递交给服务器 4.服务器读取数据库中的用户密码,利用密钥做和客户端一样的 hmac运算,然后与用户发送的结果比较,如果一致,则用户身份合法。 这么做有什么好处呢? 如果我们在登录的过程中,黑客截获了我们发送的数据,他也只能得到 hmac 加密过后的结果,由于不知道密钥,根本不可能获取到用户密码,从而保证了安全性。 Hmac有五种算法类型: 1.HmacMD5 长度128 2.HmacSHA1 160 3.HmacSHA256 256 4.HmacSHA384 384 5.HmacSHA512 512 Hmac怎么使用呢,这是个问题 我在公司研究了一下,找了一些资料 Mac mac = Mac.getInstance(algorithm); //algorithm 是算法 (HmacMD5) mac生成好了,接下来我们需要生成一个密钥 String secretKey = SecureUtil.generateKey(algorithm); //=>JDK 中自带了一个密钥生成器KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);keyGenerator.generateKey(); 最后 mac.init(secretKey) 我们要拿到加密后的数据 就使用 mac.doFinal(byte[] data) 返回byte数组,然后我们通过str的各种方式转化成string。比如hexEncode 转化。 最后的最后,com.xiaoleilu.hutool.crypto.digest.HMac 有封装好的方法 正确性还不知道,不过应该没啥问题, maven的pom是: <dependency> <groupId>com.xiaoleilu</groupId> <artifactId>hutool-all</artifactId> <version>3.1.2</version> </dependency> 另外https的协议也会让安全性更高一点,不过会影响些性能,我记得好像是。

评论