从较长的字符串生成短哈希字符串的最佳方法是什么?

Aar*_*ter 6 ruby digest

我试图在Ruby中用更长的字符串创建短的非碰撞字符串.最好的方法是什么?Base64编码MD5哈希?

这是用例:

loop do
  key = short_hash("#{user_id}-#{timestamp}")
  break if $redis.setnx(key, "0")
end
Run Code Online (Sandbox Code Playgroud)

我不希望钥匙太长.

Mat*_*fer 5

我经常使用 SHA 来实现这一点,类似于您拥有的示例。它不能保证是唯一的,但通常足以满足大多数目的:

require 'digest/sha1'
Digest::SHA1.hexdigest("#{user_id}-#{Time.now.to_i}-#{rand}")
Run Code Online (Sandbox Code Playgroud)

红宝石UUID的宝石是另一种选择。

但是在您使用 redis 的特定情况下,为什么不使用 redis INCR命令呢?然后您可以保证至少在您的数据库中的唯一性。例如:

unique_key = $redis.incr('users:next')
Run Code Online (Sandbox Code Playgroud)