我有一个带有用户表的MySql数据库。在此表中是出于安全原因而使用的随机令牌。到目前为止,我们一直在手动添加行添加用户;令牌是使用MD5(Rand())
创建的。
我现在将以编程方式添加用户principal.setToken(whatever)
之类的内容。复制我之前使用的SQL代码的最简单方法是什么?我应该使用MessageDigest和util.Random吗?有没有办法说“YO!以SQL代码运行”?
答案 0 :(得分:0)
好吧,如果你想继续使用相同的例程,可以将它包装在sql SELECT中,如下所示:
SELECT MD5(Rand()) from SOMETABLE LIMIT 1;
SOMETABLE
是系统中的某个表格。我刚试过这个,它可以在MySQL中运行。然后,您可以将其包装在java方法中并返回哈希值。这将让您前进并保留与以前相同的标记。 (如果你这样做,我也会确保SOMETABLE不是一些使用频繁的任务关键表。)
另一方面,应该没有什么能阻止你使用MessageDigest和Random。这些链接可能有所帮助:here和here。
顺便说一下,我可能不会在它自己的标记上使用随机数,除非在大结果集上发生碰撞的可能性对你来说不是问题:你可以从Rand获得相同的值多次随机。我可能会将MD5哈希基于唯一标识符和随机数的组合。使用电子邮件,名称,时间戳,进程ID,服务器ID以及随机值的任意组合可能足以为您提供更好的唯一性机会。同样,这取决于您的系统可以容忍的碰撞机会。
希望这有帮助。