license-key - 使用非对称加密生成合理长度的许可证 key ?

标签 license-key

我整天都在看这个。我可能应该在几个小时前离开它;在这一点上,我可能会遗漏一些明显的东西。

简短版本:有没有办法生成一个非对称加密的哈希并将其归结为合理数量的明确、人类可读的字符?

长版:

我想为我的软件生成许可证 key 。我希望这些键具有合理的长度(25-36 个字符)并且易于被人类阅读和输入(因此避免使用数字 0 和大写字母 O 之类的模棱两可的字符)。

最后——这似乎是关键——我真的很想使用非对称加密来增加生成新 key 的难度。

我有一个通用的方法:将我的信息(用户名、产品版本、盐)连接成一个字符串并从中生成一个 SHA1() 哈希,然后用我的私钥加密哈希。在客户端上,使用相同的信息构建 SHA1() 哈希,然后使用公钥解密许可证并查看是否匹配。

由于这是一个 Mac 应用程序,我查看了 AquaticPrime,但它会生成一个相对较大的许可证文件而不是字符串。如果必须,我可以使用它,但作为用户,我真的很喜欢我可以阅读和打印的许可证 key 的便利性。

我还查看了确实生成 key 的 CocoaFob,但它太长了,无论如何我都想将它作为文件传递。

fooled around with OpenSSL有一段时间,但无法想出任何合理的长度。

所以......我在这里遗漏了一些明显的东西吗?有没有办法生成一个非对称加密的哈希并将其归结为合理数量的明确的、人类可读的字符?

我愿意购买解决方案。但我在许多不同的平台上工作,所以我想要一些便携的东西。到目前为止,我所看到的一切都是特定于平台的。

非常感谢您的解决方案!

PS - 是的,我知道它仍然会被破解。我试图想出一些合理的东西,作为用户,我仍然会觉得很友好。

最佳答案

很不幸的是,不行。如果将其缩短,则会丢失信息并且无法重新创建原始哈希。

但是,您可以尝试以下几件事:

  • 使用 base32。将其映射到字母表中所有没有歧义的可用字母。 (0vsO 等)
  • 使用 DSA,它往往比 RSA 更紧凑。
  • 使您的输入更短(例如,截断 sha1 哈希或使用 md5)也可能使输出更短。
  • 关于license-key - 使用非对称加密生成合理长度的许可证 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2726105/

    相关文章:

    linux - Linux 的许可证替代方案

    php - 检查生成的许可证是否有效

    java - 如何解决 Spring Boot 应用程序中的 FlyWay 许可问题

    c# - 开源/免费的 C# Windows 应用程序的许可证 keystore

    c# - 如何以编程方式从 .NET 注册表中删除 Windows 产品 key ?

    Delphi RAD Studio 序列号

    java - 使用 jar 签名作为一种许可证 key

    c# - 如何使用自定义许可证验证在 VS2010 中创建 msi 安装程序

    security - 检查机器数量