HMAC-SHA1签名认证算法
来源:互联网 发布:服装出口数据 编辑:程序博客网 时间:2024/05/29 13:21
HMAC是哈希运算消息认证码 (Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。HMAC-SHA1签名算法是一种常用的签名算法,用于对一段信息进行生成签名摘要。
生成一个随机秘钥(python范例):
#coding:utf-8from Crypto.PublicKey import RSAfrom Crypto import Randomimport hashlib#get random skdef get_sk(): random_generator = Random.new().read key = RSA.generate(1024, random_generator) exportedKey = key.exportKey() return hashlib.sha1(exportedKey).hexdigest()print get_sk()
使用秘钥和消息生成一个签名(python范例):
#coding:utf-8import hashlibimport hmacimport base64# 秘钥sk = "e3988cce1bdcd1db1b0a1313e598b12040d4e16f"# 需要加密的msg,自定义msg = "GET\nuid:001\n1467556840"#授权def get_authorization(sk, msg): hashing = hmac.new(sk, msg, hashlib.sha1).hexdigest() return hashingprint get_authorization(sk, msg)
需要注意哪些问题:
a) hmac-sha1可以认为是不可逆的加密算法,sk只能保存在服务器,不能通过任何途径传输给客户端
b) 服务器发一个签名给客户端,此后服务器通过签名来校验客户端的访问权限
c) msg通过明文传输,然后服务器使用sk和传输的msg生成签名进行校验
d) 客户端和服务器通过生成的签名是否一致判断校验是否通过
ps:实际应用远比这两个小例子复杂,
由于sk不能明文传输,需要设计一个ak/sk对,ak用于明文传输,服务器根据ak从数据库查找对应的sk,同时服务器也需要判断该用户是否拥有ak的所有权。
通常时间戳也应该加入到msg中,并明文传输一份给服务器,服务器先通过明文传递的时间戳校验是否过期,再通过签名校验时间戳是否正确。
适用场景:
比如亚马逊对外提供云存储服务,A公司购买了亚马逊的服务,亚马逊给A公司注册了独有的ak/sk(每个公司的秘钥都不一样)并告知A公司,同时告知A公司加密算法原理,并要求A公司必须把sk保存在服务器上,否则秘钥泄露了A公司需要自行承担责任。
A公司在亚马逊存放了一批资源,那么A公司的用户B访问亚马逊时,用户B先到A公司的服务器申请一个签名,用户B拿着签名到亚马逊获取资源,亚马逊根据约定的算法校验用户B的访问权限。
注意:本质上有别于OAuth 2.0,因为用户B属于A公司的,而不是亚马逊的。
End;
- HMAC-SHA1签名认证算法
- 实现接口访问的HMAC-SHA1签名算法
- 使用HMAC-SHA1签名方法
- HMAC-SHA1签名工具类
- hmac-sha1算法
- HMAC-SHA1 20位签名 解决方法。
- PHP使用HMAC-SHA1+base64签名方法
- 在Android中生成HMAC-SHA1 签名
- PHP使用HMAC-SHA1+base64签名方法
- OAuth认证的 HMAC-SHA1签署 实现
- php中使用hash_hmac函数实现HMAC-SHA1签名算法的来龙去脉
- php中使用hash_hmac函数实现HMAC-SHA1签名算法的来龙去脉
- 速卖通接口签名算法--HMAC
- HMAC-SHA1和MD5 消息摘要算法(java)
- golang 中的md5 、hmac、sha1算法的简单实现
- 签名认证算法Digest
- HMAC-SHA1 java版
- HMAC-SHA1 java版
- java语言程序设计基础篇第五章编程练习题
- 三种排序算法的python实现+装饰器统计每种算法耗时
- Linux中的内存段
- Windows下定时关机
- 使用Elasticsearch + Logstash + Kibana搭建日志集中分析平台实践
- HMAC-SHA1签名认证算法
- 一致性hash
- Andrew NG 《machine learning》week 5,class2 —Backpropagation in practice
- 企业级应用架构解析
- scikit-learn : LARS
- linux下 telnet服务器的搭建
- java原子操作类-基本类型类
- 程序变量命名法:匈牙利命名、驼峰式、帕斯卡命名法
- 跟我学Android之七 资源文件