0

ユーザーは月に1回フォームに記入して送信する必要があります。したがって、毎月、トリプレットのデータ(ユーザー名、月、年)を含むフォームが必要です。ユーザーは、領収書を作成して、その特定の月のフォームを実際に送信したことを証明できるようにしたいと思います。そのため、毎月、ユーザーが領収書と一緒に提出したデータを含むレポートがあります。ただし、ユーザーが自分でそのレシートを作成できるようにしたくありません。

私が考えていたのは、、、を含む文字列を作成し、usernameその文字month列のmd5ハッシュをユーザーの領収書として提供することでした。そうすれば、ユーザーは秘密の言葉を持っていないため、md5ハッシュを生成できなくなります。しかし、私のユーザーは、そのmd5ハッシュの複雑さを見るとおそらく不平を言うでしょう。また、秘密の言葉を見つければ、みんなの領収書を作成することができます。yearsecret_word

私が求めることを行うための標準的な方法はありますか?他に考えられる解決策を教えていただけますか?

私はPythonを使用していますが、いくつかの擬似コードまたは適切なメソッドへのリンクは問題ありません。

4

1 に答える 1

1

@Serafeim、あなたのアプローチは状況に非常に適しています。これを拡張するためのいくつかのアイデアがあります:

  1. secret_word(ハッシュ用語ではsaltと呼ばれます)が十分に長いことを確認してください。
  2. 終了関数をもう少し複雑にします。たとえば、

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

  3. SHA1などのもう少し複雑なハッシュ関数を使用します
  4. エンドユーザーにハッシュ値全体を提供しないでください。たとえば、md5の16進ダイジェストには32桁が含まれていますが、レポートにハッシュの最初の5〜10桁を含めるだけで十分です。

更新しました:

リソースがある場合は、ユーザーごとにランダムなソルトを生成します。そうすれば、どういうわけかユーザーがソルトとハッシュ関数を学んだとしても、それは他の人には役に立たないでしょう。

于 2012-08-09T08:38:05.420 に答える