我正在使用hmac sha1签署一个传递给第三方服务的用户ID。 所有用户都使用相同的密码,并且每个用户的盐都是唯一的。
token = userid : timestamp+2hours : hmac(userid : timestamp+2hours, salt+secret)
token_hex = hex(hash)
hmac会用于短字符串吗? userid:timestamp可以是例如12:1304985212 盐和秘密的顺序是否重要? (盐+秘密vs秘密+盐) 什么应该是共享秘密长度和盐长度应该是多少? 我是否可以使用相同的秘密在服务器和远程服务之间签名消息,或者更好地生成单独的秘密?
由于
答案 0 :(得分:2)
你应该计算hmac(salt:userid:timestamp + 2hours,secret)并传输salt:userid:timestamp + 2hours:hash。 盐的目的是使明文更长而不重复,所以最好将其附加到明文而不是秘密。
如果你真的想改变秘密,做hmac(userid:timestamp + 2hours,hash(salt:secret)),它会让一次性秘密看起来更像是随机数。