2

我正在使用 hmac sha1 对传递给第三方服务的用户 ID 进行签名。所有用户都使用相同的秘密,并且每个用户的盐都是唯一的。

token = userid : timestamp+2hours : hmac(userid : timestamp+2hours, salt+secret)
token_hex = hex(hash)

hmac 是否适用于短字符串?userid:timestamp 可以是例如 12:1304985212 盐和秘密的顺序重要吗?(salt+secret vs secret+salt) 共享密钥长度应该是多少,盐长度应该是多少?我可以使用相同的秘密来签署服务器和远程服务之间的消息,还是生成单独的秘密更好?

谢谢

4

1 回答 1

2

您应该计算 hmac(salt : userid : timestamp+2hours, secret) 并传输 salt : userid : timestamp+2hours : hash。这里加盐的目的是让明文更长而不是重复,所以最好附加到明文,而不是秘密。

如果你真的想改变秘密,做 hmac(userid : timestamp+2hours, hash(salt : secret)),它会让一次性秘密看起来更像随机数。

于 2011-05-10T13:26:16.103 回答