gpt4 book ai didi

c - 如何在没有第 3 方软件的情况下生成唯一的、非连续的序列 key ?

转载 作者:太空狗 更新时间:2023-10-29 16:34:07 24 4
gpt4 key购买 nike

我正在从事一个项目,该项目涉及为硬件实现编写低级 C 软件。我们希望为我们的设备实现一项新功能,让我们的用户在购买相关许可 key 时可以解锁。

所需的实现步骤很简单。用户调用我们,他们请求该功能并向我们付款。接下来,我们通过电子邮件向他们发送一个产品 key ,他们将其输入到他们的硬件中以解锁该功能。

我们的硬件未连接到互联网。因此,必须以这样一种方式实现算法,即可以从服务器和设备内部生成这些 key 。 key 的种子可以从硬件序列号中获取,该序列号在两个位置都可用。

我需要一个简单的算法,它可以获取序列号并生成 16-20 个字母数字字符的唯一、非序列键。

更新

SHA-1 看起来是最好的方法。但是,我从 SHA-1 key 的样本输出中看到的是它们很长(40 个字符)。如果我使用 40 个字符的键并截断除最后 16 个字符之外的所有字符,是否可以获得足够的结果?

最佳答案

您可以只连接设备的序列号、功能名称/代码和一些 secret 盐,然后使用 SHA1(或其他安全哈希算法)对结果进行哈希处理。该设备将给定的哈希值与为每个功能生成的哈希值进行比较,如果找到匹配项,则会启用该功能。

顺便说一下,为了减少字符数,我建议在哈希传递后使用 base64 作为编码。

SHA-1 looks to be the best way to go. However, what I am seeing from sample output of SHA-1 keys is that they are pretty long (40 chars). Would I obtain sufficient results if I took the 40 char result and, say, truncated all but the last 16 characters?

通常,截断哈希值并不是一个好主意,它们旨在利用输出的所有长度来提供良好的安全性和抗冲突性。不过,您可以使用 base64 而不是十六进制字符来减少字符数,它将从 40 个字符减少到 27 个。

Hex:    a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
Base64: qUqP5cyxm6YcTAhz05Hph5gvu9M

---编辑---

实际上,@Nick Johnson 以令人信服的论据声称,哈希值可以被截断而不会产生重大安全隐患(显然会增加您丢弃的每一位发生两次冲突的可能性)。

您还应该使用 HMAC而不是天真地将 key 添加到哈希值之前或附加到哈希值。根据维基百科:

The design of the HMAC specification was motivated by the existence of attacks on more trivial mechanisms for combining a key with a hash function. For example, one might assume the same security that HMAC provides could be achieved with MAC = H(key ∥ message). However, this method suffers from a serious flaw: with most hash functions, it is easy to append data to the message without knowing the key and obtain another valid MAC. The alternative, appending the key using MAC = H(message ∥ key), suffers from the problem that an attacker who can find a collision in the (unkeyed) hash function has a collision in the MAC. Using MAC = H(key ∥ message ∥ key) is better, however various security papers have suggested vulnerabilities with this approach, even when two different keys are used.

有关此和长度截断的安全隐患的更多详细信息,请参阅 RFC2104 的第 5 和第 6 节.

关于c - 如何在没有第 3 方软件的情况下生成唯一的、非连续的序列 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7636765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com