0

要求我们的用户每月填写并提交一次表格。因此,每个月我们都应该有一个包含三元组数据(用户名、月份、年份)的表单。我希望我们的用户能够通过为他们创建收据来证明他们确实确实提交了该特定月份的表单。因此,每个月都会有一份报告,其中包含用户提交的数据以及收据。我不希望用户能够自己创建该收据。

我的想法是创建一个包含username, month,的字符串yearsecret_word并将该字符串的md5 哈希作为收据提供给用户。这样,因为用户没有密码,他们将无法生成 md5 哈希。然而,当我的用户看到 md5 哈希的复杂性时,他们可能会抱怨。此外,如果找出秘密词,他们将能够为每个人创建收据。

有没有按照我的要求做的标准方法?你能推荐我任何其他可能的解决方案吗?

我正在使用 Python,但可以使用一些伪代码或链接到适当的方法。

4

1 回答 1

1

@Serafeim,您的方法非常适合这种情况。以下是一些扩展它的想法:

  1. 确保 secret_word (在散列术语中称为salt)足够长。
  2. 使最终功能更复杂一些,例如

    hash = h(h(username) + month + year + h(salt))

  3. 使用更复杂的哈希函数,例如 SHA1
  4. 不要给最终用户整个哈希值。例如,md5 十六进制摘要包含 32 位数字,但报告中包含哈希的前 5-10 位数字就足够了。

更新:

如果您有资源,请为每个用户生成随机盐。然后,即使用户以某种方式学习了盐和散列函数,对其他人来说仍然无用。

于 2012-08-09T08:38:05.420 回答