暗号関数の引数が文字列であることに少し混乱しています。文字列以外の引数をstr()で単純にラップする必要があります。
hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))
(random.randbits()が暗号的に適切でない可能性があることは今のところ無視してください)。編集:キーをどこにも保存していないので、hmacの例はばかげていることに気づきました!
暗号関数の引数が文字列であることに少し混乱しています。文字列以外の引数をstr()で単純にラップする必要があります。
hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))
(random.randbits()が暗号的に適切でない可能性があることは今のところ無視してください)。編集:キーをどこにも保存していないので、hmacの例はばかげていることに気づきました!
さて、通常、ハッシュ関数(および一般的に暗号化関数)はバイトで機能します。Python文字列は基本的にバイト文字列です。オブジェクトのハッシュを計算する場合は、それを文字列表現に変換する必要があります。ハッシュが正しいかどうかを確認したい場合は、後で同じ操作を適用してください。また、文字列表現に、チェックしたくない変更データが含まれていないことを確認してください。
編集:人気のあるリクエストにより、Pythonユニコード文字列にはバイトは含まれていませんが、ユニコードコードポイントが含まれていることを簡単に思い出してください。各ユニコードコードポイントには、複数のバイトが含まれています(Pythonインタープリターのコンパイル方法に応じて2または4)。Python文字列にはバイトのみが含まれます。したがって、Python文字列(タイプstr)は、バイトの配列に最も類似したタイプです。
あなたはできる。
ただし、HMACの場合、実際にはキーをどこかに保存する必要があります。キーがないと、後でハッシュ値を確認する方法はありません。:-)
ああ、Sha256は実際には産業用の強力な暗号化機能ではありません(残念ながら、多くのサイトで非常に一般的に使用されています)。これは、パスワードやその他の重要なデータを保護するための実際の方法ではありませんが、一時的なトークンを生成するには十分すぎるほどです。
編集:前述のように、Sha256には少なくともいくらかの塩が必要です。ソルトがないと、Sha256は辞書攻撃(時間的に)でクラックされる可能性が低く、使用するレインボーテーブルもたくさんあります。個人的には、パスワードにBlowfish以外のものは使用しません(ただし、それは私がパラノイアだからです)