我将始终假设您的代码将由正确的(伪)随机数生成。如果您生成大量它们,请确保为生成它们的计算机的随机数生成器提供足够的熵。
像您所说的代码通常被创建为随机可打印字符的字符串。例如,一种方法是生成一个 144 位随机数并对其进行 base64 编码。这将为您提供包含 24 个字符的字符串的 144 位信息。通常人们不介意将字符串读作垃圾,因为它们要么被复制粘贴,要么嵌入在 URL 中。您可以将此字符串视为由 64 个字符的字母表生成的 24 个符号的序列,或由 2 位的字母表生成的 144 个符号的序列。结果是一样的。
生成 WORDS 列表而不是 CHARACTERS(或 BIT)列表是类似的。您使用的不是 2 位或 64 个字符的字母表,而是 4000 到 6000 个单词的字母表。这是一个更大的字母表(更多信息),但您希望在您的短语中使用更少或它们(更少信息)。
使用n
单词,您将获得 log₂((4000 到 6000)ⁿ) 位。为简单起见,假设您选择了 4096 个单词的字母表。要包含与 144 位标记相同数量的信息,您的短语将需要每个包含 12 个单词。
您的要求“必须有大量代码,100 万”不清楚。您的意思是代码空间必须是 100 万个短语,还是您打算生成 100 万个不同的短语,这些短语是更大的代码空间的每个部分。
如果您的代码空间需要为 100 万,则只有 log₂(1000000) = 20 位。2个单词的短语就可以了。我想这可能是一个很小的代码空间......但这取决于对手有多少机会猜测正确的短语以及他们能够以多快的速度进行猜测。它还取决于对手猜测正确代码的破坏性。在不知道您的要求的情况下,我只能猜测您想要拥有多大的代码空间。比特数可能是原来的两倍(1 万亿个代码)?
问题 2:只要生成短语的计算机具有良好的随机性来源,生成短语的位置并没有任何区别。如果有疑问,请使用您的桌面。然后,如何将它们加载到数据库中并不重要,无论是 RPC、远程数据库访问还是将文件复制到服务器。
如果您生成大量短语,请注意将它们作为纯字符串存储在数据库中的成本会很高。您可以通过将它们编码为整数序列来节省大量空间,这些整数是您的参考词表的索引。
额外:请注意,如果您在每个短语中使用超过 2 或 3 个单词,您可能会发现这些短语与随机字符序列一样难以记忆和键入。这是因为即使它们由真实的单词组成,这些短语也大多是无意义的,包括在语法上不能彼此相邻的单词。
如果你想减轻这种情况,你可以使用一个统计模型来了解某些单词在文本语料库(例如,一组文献)中彼此相邻出现的频率,以使单词序列看起来很自然一个人。对相邻单词的相邻部分、三元组或四元组进行建模分别称为第二、第三或 n 级马尔可夫链。
显然,生成这样的短语将减少短语中的信息量(在信息论意义上),因此您必须通过延长它们来进行补偿。使用特定统计模型导致的信息减少的确切数量留作练习供您计算:-)