首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用非对称加密生成合理的长度许可密钥?

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

Stack Overflow用户
提问于 2010-04-28 00:35:02
回答 4查看 5K关注 0票数 6

我一整天都在看这个。我可能几个小时前就该离开它了;我可能在这一点上遗漏了一些显而易见的东西。

短版本:是否有一种方法可以生成不对称加密的散列,并将其归结为合理数量的明确的人类可读的字符?

长篇版本:

我想为我的软件生成许可证密钥。我希望这些键有一个合理的长度(25-36个字符),并且容易被人阅读和输入(因此避免像数字0和大写字母O这样的模糊字符)。

最后--这似乎是一种刺激--我真的很想用非对称加密来增加生成新密钥的难度。

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

因为这是一个Mac应用程序,所以我看了AquaticPrime,但是这会生成一个相对较大的许可文件,而不是一个字符串。如果必须的话,我可以使用它,但是作为一个用户,我真的很喜欢我可以读取和打印的许可密钥的方便性。

我还查看了CocoaFob,它确实生成了一个密钥,但是它太长了,所以我无论如何都想把它作为一个文件来传递。

和OpenSSL混在一起了一段时间,但不能想出任何合理的长度。

So...am,我错过了一些显而易见的东西吗?是否有一种方法可以生成不对称加密的散列,并将其归结为合理数量的明确的、人类可读的字符?

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

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

是的,我知道它还会被破解的。我试着想出一些合理的东西,作为一个用户,我仍然会找到友好的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-04 23:32:30

很遗憾,我不会。如果您缩短了它,您将丢失信息,并将无法重新创建原始哈希。

但是,您可以尝试以下几点:

  • 使用base32。将其映射到字母表中的所有可用字母,这些字母都是不含糊的。(0vsO等)
  • 使用DSA,它往往比RSA更紧凑。
  • 使您的输入更短(例如,截断sha1哈希或使用md5 )也可能使输出更短。
票数 1
EN

Stack Overflow用户

发布于 2010-06-17 15:03:22

将每个SHA1字符作为十六进制,可能删除任何不必要的格式,(破折号或括号),使用一些数组映射将0-9A-F转换为某种随机顺序的as,使用它作为您输入的“人工”文本。MD5将为您提供32个字符,或者为SHA1再提供一些字符。将字符解映射回SHA1 1/MD5字符串/字节,然后从那里继续。

票数 0
EN

Stack Overflow用户

发布于 2016-06-03 12:43:42

目前创建短许可证密钥的最佳基于签名的方法似乎是Boneh-Lynn-Shacham签名方案,尽管它是最近才出现的(并不是很多评论),并且没有在常见的密码工具中实现。

下面是一种使用通用openssl和bash的方法:

代码语言:javascript
复制
openssl ecparam -genkey -name sect113r1 -out private.key # generate the private key (store it on your server)
openssl ec hist-in private.key -pubout -out public.key # generate a public key (store it in the client software)
# generate a random one time activation userID or a hardware-based one here (CLIENT SIDE)
user_id="unique_on_the_fly_generated_user_ID" # send the user ID to the server for license generation
signature=""
return_value=0
while [[ $return_value == 0 ]]
do
    signature=$(echo "$user_id" | openssl dgst -sign private.key | base64 > signature.txt) # generate a user licence
    echo "$signature" | egrep -q 'O|l|/|\+|=' # check for ambiguous chars
    return_value=$?
done
echo "$signature" | base64 -d > signature.txt # send the signature/license to the client
openssl dgst -verify public.key -signature signature.txt # verify signature (CLIENT SIDE)

请注意,您仍然得到一个48个字符长的签名/许可证密钥(加上一个通用的"M“头字符,您可以避免发送)。据我所知,目前您无法用openssl生成更短的签名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2726105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档