|
|
1
13
如果你需要大约1000万个唯一密钥(例如),最好的方法是选择一个指数级更大的密钥空间,并开始随机生成。阅读 Birthday Paradox --这是你最应该担心的事情。如果你想要2^n个唯一且安全的密钥,请确保至少有2^(2*n)个可能的值。这是一个粗略的O(n log n)算法:
伪代码:
|
|
|
2
7
假设你可以使用一个字符集,比如40个明确的上、下和数字字符。 对于n个字符的序列,您有40个字符 n 结合
因此,8个字符提供了一个相当好的工作空间——如果你生成了1000万个代码,你必须尝试数十万种组合来暴力破解一个代码。 或者你从另一个方向过来——给出 可能的 代码,有多少个代码 本应 您生成以避免他们称之为的陷阱 Birthday Paradox ? 取8个字符的代码,65536000000000大约是2 42 ,因此您可以合理地生成2 21 代码,或2097152 |
|
|
3
0
使用一次性密码算法? RFC4225详细介绍了一种基于HMAC算法的方法。 http://www.ietf.org/rfc/rfc4226.txt 但是使用base32而不是使用0-9位的base10编码。 |
|
|
4
0
无论你使用哪种方法,我建议你添加一两个校验位作为“一线”防御,防止人们误输入或试图发明一个数字。 |
|
|
5
-3
奇怪的是,使用以下种子,我只能生成32个唯一的字符串。 ABCDEFGHJKLMNPQRSTUVWXYZ23456789 有了更长的种子,我能够生成更多的种子——成功生成了40000个独特的字符串。 abcdefghjklmnpqrstuvxyz2345678923456789abcdefgjklmnpnqrstuvoxyz234567892345678923456789abcdevjklmnpkrstuvxyz 234567892234567892 |