2023年7月27日发(作者:)
HMAC-SHA1签名认证算法HMAC-SHA1:
HMAC是哈希运算消息认证码 (Hash-based Message Authentication Code),HMAC运算利⽤哈希算法,以⼀个密钥和⼀个消息为输⼊,⽣成⼀个消息摘要作为输出。HMAC-SHA1签名算法是⼀种常⽤的签名算法,⽤于对⼀段信息进⾏⽣成签名摘要。⽣成⼀个随机秘钥(python范例):#coding:utf-8from Key import RSAfrom Crypto import Randomimport hashlib#get random skdef get_sk(): random_generator = ().read key = te(1024, random_generator) exportedKey = Key() return 1(exportedKey).hexdigest()print get_sk()使⽤秘钥和消息⽣成⼀个签名(python范例):#coding:utf-8import hashlibimport hmacimport base64# 秘钥sk = "e3988cce1bdcd1db1b0a1313e598b12040d4e16f"# 需要加密的msg,⾃定义msg = "GETnuid:001n1467556840"#授权def get_authorization(sk, msg): hashing = (sk, msg, 1).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的访问权限。注意:本质上有别于,因为⽤户B属于A公司的,⽽不是亚马逊的。End;
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690463122a352917.html
评论列表(0条)