【发布时间】:2011-02-13 03:25:43
【问题描述】:
我整天都在看这个。我可能应该在几个小时前离开它;在这一点上,我可能遗漏了一些明显的东西。
短版:有没有办法生成非对称加密哈希并将其归结为合理数量的明确、人类可读的字符?
长版:
我想为我的软件生成许可证密钥。我希望这些键具有合理的长度(25-36 个字符),并且易于被人类阅读和输入(因此请避免使用数字 0 和大写字母 O 之类的模棱两可的字符)。
最后——这似乎是关键——我真的很想使用非对称加密来增加生成新密钥的难度。
我有一个通用的方法:将我的信息(用户名、产品版本、盐)连接成一个字符串并从中生成一个 SHA1() 哈希,然后用我的私钥加密该哈希。在客户端上,使用相同的信息构建 SHA1() 哈希,然后使用公钥解密许可证并查看是否匹配。
由于这是一个 Mac 应用程序,我查看了 AquaticPrime,但它生成的许可证文件相对较大,而不是字符串。如果必须,我可以使用它,但作为用户,我真的很喜欢我可以阅读和打印的许可证密钥的便利性。
我还查看了生成密钥的 CocoaFob,但它太长了,我还是想将它作为文件传递。
我fooled around with OpenSSL 了一段时间,但想不出任何合理的长度。
所以...我在这里遗漏了一些明显的东西吗?有没有办法生成非对称加密的哈希并将其归结为合理数量的明确、人类可读的字符?
我愿意购买解决方案。但是我在许多不同的平台上工作,所以我想要一些便携的东西。到目前为止,我看到的所有内容都是特定于平台的。
非常感谢您的解决方案!
PS - 是的,我知道它仍然会被破解。我正在尝试提出一些合理的东西,作为用户,我仍然会觉得很友好。
【问题讨论】:
-
答案似乎是:不,你不能。如果有人能证明我错了,我会留下这个问题,但据我所知,加密哈希只需要那么多字节,就是这样。我最终使用了 CocoaFob,到目前为止,没有人抱怨过(荒谬的)长许可证密钥。
-
作为一个兴趣点:我的应用程序,尽管它是晦涩难懂的,但在不到 24 小时内就被破解了。但它需要对可执行文件进行修补(他们用他们自己的一个交换我的公钥),然后他们的密钥生成器才能工作。我可以轻松破解每个新版本的补丁(只需随机播放密钥),这样我就可以忍受它了。
-
Base58 编码消除了不明确的字符。
标签: license-key