代码之家  ›  专栏  ›  技术社区  ›  Marc Charbonneau

使用OpenSSL生成短许可证密钥

  •  2
  • Marc Charbonneau  · 技术社区  · 15 年前

    based on this article ,是使用一个大的私钥大小并加密一个SHA1散列字符串,我将其作为许可证文件发送给客户(base64编码的散列长度约为一段)。我知道有人仍然可以很容易地破解我的应用程序,但它阻止了有人制作密钥生成器,我认为从长远来看,这会造成更大的伤害。

    出于各种原因,我想远离许可证文件,只需通过电子邮件发送一个16个字符的base32字符串,客户就可以在应用程序中键入。即使使用很小的私钥(据我所知,破解这些密钥很容易),也很难得到这么小的加密散列。使用相同的策略生成加密的散列,而只是将前16个字符用作许可证密钥,会有什么好处吗?如果没有,是否有更好的替代方法以我想要的格式创建键?

    3 回复  |  直到 15 年前
        1
  •  2
  •   caf    15 年前

    DSA签名比RSA签名短得多。DSA签名是 Q 参数;如果您使用OpenSSL默认值,Q是160位,因此您的签名适合320位。

    如果您可以切换到base-64表示法(只需要大写和小写字母数字、数字和其他两个符号),那么您将需要53个符号,这可以用11组5来完成。不完全是您想要的16个,但仍然在用户可输入的范围内。


    R S ,每个大小 Q . 然而 R 所有值都可以由签名者(您)预先计算—唯一的要求是您永远不要重复使用它们。这意味着你可以预先计算出一整张 R 值—比如100万个(占用20MB)—并作为应用程序的一部分分发这些值。现在,在创建许可证密钥时,选择下一个未使用的密钥 值,并生成 S 价值观。许可证密钥本身只包含 S 值(160位)。

    R 桌子。

        2
  •  1
  •   Eugene Mayevski 'Callback    15 年前

    当然,如果您不需要强密钥,您可以使用“secret word”(salt)+用户名的散列,并在应用程序中验证它们,但这在几分钟内就可以破解。

        3
  •  0
  •   Nick Johnson    15 年前