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

sta*_*kos 6 license-key

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

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

长版:

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

最后 - 这似乎是踢球者 - 我真的很想使用非对称加密来使生成新密钥变得更加困难.

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

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

我还看了CocoaFob确实生成了一个密钥,但它太长了以至于我还是想把它作为一个文件提供.

在OpenSSL上愚弄了一段时间,却无法想出任何合理的长度.

那么......我错过了一些明显的东西吗?有没有办法生成并将非对称加密的哈希值归结为合理数量的明确的,人类可读的字符?

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

很多,非常感谢您的解决方案!

PS - 是的,我知道它仍然会被破解.我想提出一些合理的东西,作为一个用户,我仍然会发现友好.

Ken*_*ger 1

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

不过,您可以尝试以下几件事:

  • 使用base32。将其映射到字母表中所有可用的明确字母。(0vsO等)
  • 使用DSA,它往往比RSA更紧凑。
  • 缩短输入(例如截断 sha1 哈希,或使用 md5 代替)也可能会使输出更短。