質問

暗号関数の引数が文字列であることに少し混乱しています。文字列以外の引数を単純にstr()でラップする必要がありますか?

hashlib.sha256(str(user_id)+str(expiry_time))
hmac.new(str(random.randbits(256)))

(random.randbits()が暗号的に適切でないかもしれないという瞬間は無視してください)。 編集:私はキーをどこにも保存していないので、hmacの例は馬鹿げていることに気付きます!

役に立ちましたか?

解決

まあ、通常、ハッシュ関数(および一般に暗号化関数)はバイトに対して機能します。 Python文字列は基本的にバイト文字列です。何らかのオブジェクトのハッシュを計算する場合は、文字列表現に変換する必要があります。ハッシュが正しいかどうかを確認する場合は、後で同じ操作を必ず適用してください。また、チェックしたくない変更データが文字列表現に含まれていないことを確認してください。

編集:Pythonのユニコード文字列にはバイトではなくユニコードコードポイントが含まれているという短いリマインダーがよく寄せられています。各Unicodeコードポイントには、複数バイト(Pythonインタープリターのコンパイル方法に応じて2または4)が含まれます。 Python文字列にはバイトのみが含まれます。したがって、Python文字列( str 型)は、バイト配列に最も類似した型です。

他のヒント

できます。

ただし、HMACの場合、実際にはキーをどこかに保存する必要があります。キーがなければ、後でハッシュ値を検証する方法はありません。 :-)

OhとSha256は、実際には産業用強度の暗号化機能ではありません(残念ながら、多くのサイトで非常に一般的に使用されています)。パスワードやその他の重要なデータを保護する実際の方法ではありませんが、一時的なトークンを生成するには十分です

編集:前述のとおり、Sha256には少なくとも塩が必要です。塩を使用しないと、Sha256は辞書攻撃(時間単位)でクラックされることに対する障壁が低くなり、使用するレインボーテーブルもたくさんあります。個人的には、パスワードにBlowfish以外のものは使用しません(しかし、それは私が妄想だからです)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top