TIL#10[Django]暗号化と認証
パスワードをまだ保存している場合は、 DBがハッカーによって攻撃された場合、パスワードはそのまま暴露されます.
ユーザーのパスワードが暗号化されておらず、公開的に保存されている場合、サーバ内部のユーザまたは開発者が悪意を持って使用する可能性があるため、 を暗号化する必要がある.
なぜユーザーのパスワードを暗号化しますか? DBがハッカーに攻撃されても、ユーザーのパスワードは暗号化され、ユーザーが悪意を持って使用できない時間を創造します.
内部者もパスワード を知らない
いちほうこうハッシュかんすう
一方向ハッシュ関数は、元のメッセージを変換することによって暗号化メッセージを生成する
元のメッセージを知っている場合は、暗号化前に元のメッセージを知ることができますが、暗号化されたメッセージから元のメッセージを取得することはできません. 一方向 と呼ぶ.
単一方向ハッシュ関数の弱点
ハッシュの処理速度が非常に速いため、これを利用して複数文字のハッシュ値を事前に取得するRainbow Table攻撃を受けやすい.さらに、ほとんどのユーザーのパスワードが同じか似ているため、1人のユーザーのパスワードはより脆弱です.
一方向ハッシュ関数の不足を補う方法 KeyStretching-KEY STRETCHING暗号化されたパスワードが解読されるまでに時間がかかり、それまでパスワード変更によるハッカー攻撃を最小限に抑えることができます.
セキュリティ・ストレージ:ハッシュ・パスワードにランダム値を追加してハッシュする方法
ハッシュメソッド 仮想環境ON インストール bcrypt bcryptモジュールマウントImport bcrypt ハッシュ文字列符号化
ハッシュパスワードの比較方法
ユーザーパスワードの保存方法ユーザIDとパスワード生成パスワード符号化 ユーザパスワード暗号化後、復号化後はDBに保存する(符号化状態で保存するとバイト状態を示すハッシュ文字列前bに保存し、文字列としてDBに保存するが、使用時は既存入力のパスワードとは異なり注意!) ユーザーログイン->IDとパスワードの入力 ユーザが生成したパスワードを符号化し、暗号化してデータベースに格納したユーザパスワードと比較する.
なぜユーザーのパスワードを暗号化しますか?
いちほうこうハッシュかんすう
一方向ハッシュ関数は、元のメッセージを変換することによって暗号化メッセージを生成する
元のメッセージを知っている場合は、暗号化前に元のメッセージを知ることができますが、暗号化されたメッセージから元のメッセージを取得することはできません. 一方向 と呼ぶ.
単一方向ハッシュ関数の弱点
ハッシュの処理速度が非常に速いため、これを利用して複数文字のハッシュ値を事前に取得するRainbow Table攻撃を受けやすい.さらに、ほとんどのユーザーのパスワードが同じか似ているため、1人のユーザーのパスワードはより脆弱です.
一方向ハッシュ関数の不足を補う方法
ハッシュメソッド
a = '1234'
a = a.encode('utf-8')
5.パスワードハッシュ hashed_pw = bcrypt.hashpw(a, bcrypt.gensalt() )
ハッシュする変数を宣言し、bcryptを宣言します.hashpwハッシュを生成する関数に符号化パラメータaとsalt値のbcryptを追加する.gensalt()を追加すると、salt値を追加するハッシュパスワードが生成されます. b'$2b$12$vYMsKVGrXez8pi3s8HDA5enSwInC/RB7Q0q8ubm2dwV7opATGu5P.'
DBに保存するときは復号して保存する必要があります!ハッシュパスワードの比較方法
a='1234' #사용자가 입력한 패드워드
#hased_pw는 DB에 저장된 암호화된 패스워드
bcrypt.checkpw(a.encode('utf-8'), hashed_pw)
해쉬된 비밀번호가 일치하면 True
일치하지 않다면 False가 출력된다
データベースから確認を取り出すときは、確認をエンコードする必要があります!ユーザーパスワードの保存方法
Reference
この問題について(TIL#10[Django]暗号化と認証), 我々は、より多くの情報をここで見つけました https://velog.io/@tgrf07/TIL10-인증인가テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol