我正在研究生成随机人类友好代码的方法,但不能(容易)猜测.这将用于赠送奖品(想想独特的折扣代码).我们要产生大约50k.有没有标准的方法/算法来实现这一目标?我正在考虑使用GUID并应用CRC.这是一个坏主意吗?
如果重要,请使用.netframework 3.5.
我通过从MD5校验和中取出位并将它们用于索引到单词列表中,生成了人性化的校验和.例如:
: nr@yorkie 7012 ; md5words /home/nr/.profile overextend moonscape cucumbers outsmarting
代码是大约40行的Lua,不包括单词列表,它包含在脚本中,以便在每个系统上产生相同的结果.
编辑:
在您的应用程序中,您希望生成50,000个密钥.你可以这样做:
for ((i=1; i<=50000; i++)) do echo "this is my secret phrase $i" | md5words done
将此过程与不同的密码短语一起使用可生成以下密钥:
Chisinau Phaethon customs Martina commensurate freewill logical cambered kamikazes Creighton Dobro's Alonzo medallion's jesters goofy keystones Anaxagoras martial Medina's Hon's acclimatized chirping Cleopatra's mascaras buoyant nuclear lumbering disagreements dampens Philby cloak drollness
这些键难以伪造:单词列表上有近100,000个单词,因此有10 ^ 20个可能的4个单词序列.如果您有100,000个代码,那么某人能够随机猜测代码的几率是10 ^ 15中的一个.如果你对允许人们尝试的按键数量设置一个限制,比如每0.3秒说一个按键,你就不会有问题.
如果我在你的应用程序中部署这个想法,我会将单词列表修剪为更短的内容,也许只有10,000个非常常见的单词.即使在失去10 ^ 4的因素之后,这些数字对你有利 - 猜测一把钥匙的机会将是千分之一.
更新:2011年8月,这项技术成为xkcd漫画的主题.