博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HMAC
阅读量:5316 次
发布时间:2019-06-14

本文共 1428 字,大约阅读时间需要 4 分钟。

HMAC 的用途

HMAC 算法主要应用于身份验证,用法如下:

1.客户端发出登录请求

2.服务器返回一个随机值,在会话记录中保存这个随机值
3.客户端将该随机值作为密钥,用户密码进行 hmac 运算,递交给服务器
4.服务器读取数据库中的用户密码,利用密钥做和客户端一样的 hmac运算,然后与用户发送的结果比较,如果一致,则用户身份合法。

这么做有什么好处呢? 如果我们在登录的过程中,黑客截获了我们发送的数据,他也只能得到 hmac 加密过后的结果,由于不知道密钥,根本不可能获取到用户密码,从而保证了安全性。

HMAC 的种类

算法种类                摘要长度HmacMD5                 128HmacSHA1                160HmacSHA256              256HmacSHA384              384HmacSHA512              512

HMAC 的使用

1 . 刚才也看到了,想要使用 HMAC 算法,那么我们需要生成一个密钥,这个密钥怎么生成呢?自己随便瞎填吗? JDK 中自带了一个密钥生成器 KeyGenerator 用于帮助我们生成密钥,示例如下

public static byte[] getSecretKey() throws Exception {    KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5"); // 可填入 HmacSHA1,HmacSHA256 等    SecretKey key = keyGenerator.generateKey();    byte[] keyBytes = key.getEncoded();    return keyBytes;}

2 . 既然已经得到了密钥,那么下面就开始执行消息摘要算法,在这之前,由于我们生成的密钥是以 byte 数组返回的,所以我们需要将其还原成 SecretKey,具体过程如下

public static String encryptHmac(byte[] key, byte[] data) throws Exception {    SecretKey secretKey = new SecretKeySpec(key, "HmacMD5");    Mac mac = Mac.getInstance("HmacMD5");    mac.init(secretKey);    byte[] resultBytes = mac.doFinal(data);    String resultString = byteToHexString(resultBytes);    return resultString;}

如果想使用其他的算法,可以将填入 HmacMD5 的所有字段改为你想使用的算法即可,比如 HmacSHA1, HmacSHA256 等。

下面对 helloworld 执行算法查看结果

1efd5e8d4d0c20f68bdc732fd7a79677

链接:http://www.jianshu.com/p/3fe2add1eb42

转载于:https://www.cnblogs.com/blue-Wind/p/7591875.html

你可能感兴趣的文章
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
pandas 修改指定列中所有内容
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
UNITY在VS中调试
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
php中的isset和empty的用法区别
查看>>
Android ViewPager 动画效果
查看>>
把word文档中的所有图片导出
查看>>