我正在尝试实现一个id混淆方案,在其他地方借用一个简单的哈希。我在应用程序助手上添加了一个方法:
@@M_ID = 2**31-1
@@PRIME = 1580030173
@@PRIME_INVERSE = 59260789 # (calculated from MAXID and PRIME offline)
def obfuscate_id(x)
if x
return ((x * @@PRIME) & @@M_ID)
else
x
end
end
出于某种原因,每当调用它时,ruby会锁定,并开始占用我的mac上的磁盘空间...就像它的演出一样。任何想法?
答案 0 :(得分:3)
您确定x
是一个数字吗?如果x
是一个字符串,我可以看到这种情况发生 - 在Ruby中,字符串时间数字给你重复的字符串连接:
irb(main):004:0> "hi" * 32
=> "hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihi"
而你的@@PRIME
肯定足以吃掉淫秽的记忆。如果是这种情况,添加to_i
应该修复它(并且您的条件可能会消失):
irb(main):007:0> "hi".to_i * 32
=> 0
irb(main):008:0> "32".to_i * 32
=> 1024
希望有所帮助!