Algorithm 创建大量随机串行密钥

Algorithm 创建大量随机串行密钥,algorithm,random,license-key,serial-number,Algorithm,Random,License Key,Serial Number,我正在开发一个应用程序,其中用户只有在正确输入串行密钥的情况下才能进行身份验证。此串行密钥与数据库中已存在的串行密钥相匹配。该序列键应由6位数字和3个字母组成。用户以书面形式从我这里获得这些密钥 如何生成大量(约100000000)的串行密钥?我认为最简单的方法是: 在范围[110000000)中找到所需的数字,将其设为x,然后 将代表您的6位数字 找到3个字符(假设在a-z范围内)。让它们成为a、b、c 您的号码是(a-'a'+b-'a'*26+c-'a'*26*26)*10000000+x

我正在开发一个应用程序,其中用户只有在正确输入串行密钥的情况下才能进行身份验证。此串行密钥与数据库中已存在的串行密钥相匹配。该序列键应由6位数字和3个字母组成。用户以书面形式从我这里获得这些密钥


如何生成大量(约100000000)的串行密钥?

我认为最简单的方法是:

  • 在范围
    [110000000)
    中找到所需的数字,将其设为
    x
    ,然后 将代表您的6位数字
  • 找到3个字符(假设在a-z范围内)。让它们成为
    a、b、c
  • 您的号码是
    (a-'a'+b-'a'*26+c-'a'*26*26)*10000000+x
  • (其中“a”是字符
    'a'
    的ascii表示,而a-“a”表示数字ascii减法)

    请注意,生成的数字甚至可以放入一个
    长的
    ——假设它是64位



    只需通过迭代即可生成多个数字,从
    a=b=c='a'
    x=0
    开始,然后开始前进(增加1)。一旦达到
    x=10000000
    ,增加a,如果
    a
    通过z-增加
    b
    ,…(类似于正常整数加法算法中的操作).

    您可以使用像
    SecureRandom
    这样的安全随机数生成器来生成密钥


    但正如评论中已经提到的,如果生成那么多密钥,那么所有可能密钥的空间就不会大很多。因此,攻击者很容易尝试密钥,直到找到一个有效的密钥。

    用户如何获得密钥?他们以书面形式获得多高的“安全性”您需要密钥吗?假设没有校验和,攻击者平均必须生成约176个密钥才能正确猜出一个。足够好吗?我需要具有高安全性的校验和。添加校验和会降低安全性(尝试的密钥更少)它是随机的吗?它看起来像是一种很容易预测的顺序。@GaganDeep:不,它是顺序的(我不明白你在追求随机)。要获得随机数,可以迭代地为x、a、b、c创建不同的值,并维护一个集合,以检查这些值是否仍然可用。那么解决方案是什么呢?使用SecureRandom,您可以生成足够的随机字节,可以将其转换为看起来像您描述的密钥。例如,像amit在其回答中描述的密钥。如果您需要更高的安全性,使密钥更长。