hmac 密钥和盐长度
我正在使用 hmac sha1 对传递给第三方服务的用户 ID 进行签名。 所有用户都使用相同的秘密,并且每个用户的盐都是唯一的。
token = userid : timestamp+2hours : hmac(userid : timestamp+2hours, salt+secret)
token_hex = hex(hash)
hmac 适用于短字符串吗? userid:timestamp 可以是例如 12:1304985212 盐和秘密的顺序重要吗? (盐+秘密与秘密+盐) 共享秘密长度应该是多少,盐长度应该是多少? 我可以使用相同的密钥来签署服务器和远程服务之间的消息,还是生成单独的密钥更好?
谢谢
I'm using hmac sha1 to sign a userid which is passed to a third party service.
The same secret is used for all users and the salt is unique for each user.
token = userid : timestamp+2hours : hmac(userid : timestamp+2hours, salt+secret)
token_hex = hex(hash)
Will hmac work for short strings? userid:timestamp can be for example 12:1304985212
Does the order of salt and secret matters? (salt+secret vs secret+salt)
What should be the shared secret length and what should be the salt length?
Can I use the same secret to also sign messages between the server and the remote service or is it better to generate a separate secret?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该计算hmac(salt:userid:timestamp+2hours,secret)并传输salt:userid:timestamp+2hours:散列。
这里加盐的目的是使明文更长并且不重复,因此最好将其附加到明文中,而不是秘密的。
如果你真的想更改秘密,请执行 hmac(userid : timestamp+2hours, hash(salt : Secret)),它会使一次性秘密看起来更像随机数。
You should calculate hmac(salt : userid : timestamp+2hours, secret) and transmit salt : userid : timestamp+2hours : hash.
Purpose of salt here is to make plaintext longer and not repeating, so it better be appended to plaintext, not secret.
If you really want to change secret, do hmac(userid : timestamp+2hours, hash(salt : secret)), it will make one-time secret look more like random number.