競プロの解説をPythonでやっていきます。できるだけ初心者に分かりやすいように『やるだけ』とかは言わないようにします。コメントについては必ず読んでいます。どんなに細かいことでもいいのでコメントくださればうれしいです。この広告は、90日以上更新していないブログに表示しています。Python以前、”国会にhash関数の話が出たwww”といって、そっちの界隈の人でちょっとした話題になっていました。hashとはなんなのか?分からない人もいると思います。それがわかっても、Pythonでの実装がわからない方もいらっしゃると思いますので、この記事を書いた次第です。hashって?wikipediaを参照するとデータから算出した小さな値。各データを区別・表現する目的に用いる。あるデータから、それ固有の値を取り出して(計算から導き出す)、データの区別に使うための値。この計算というのが大事で、たとえば、長さが400ページ以上もある本を文字に落とし込んで所得したhashと、その文字列の句点と読点を一個だけ入れ替えた文字列のhashは異なります。そこから、文書の改ざん対策などにも用いられるんですね。その『元からhashを求めるのは用意である』が『hashから元を求めるのは非常に困難である』という性質を利用して、暗号・セキュリティにも用いられています。Pythonで実装Pythonにはhash関数が元からありますので、それを利用してみましょう。dictなど)は用いないでください4940519975841726253求められましたね。これではだめですこのhashが信頼できるのは、このインタープリタを閉じるまでだからです。一度閉じて、もう一度実行してみましょう。hash("1")2261270426266027010おなじ文字列のhashを取り出したにもかかわらず、違う値が出ていますよね。このように、正当性を確かめるには、標準のhashは不向きであるとわかります。同じ値が返ってきますみなさんが同じコードを打っても、同じ値が返ってくるはずです。これが、一意性を保っているということです。MD5(hash化の方法の種類です)のほかに、SHA1、SHA224、SHA256、SHA384、SHA512が対応しているようです。ユーザーのパスワードをhash化して持っておき、ログインしようとしたときに、そのhashと入力された文字列のhashを比べる、なんてこともできますよね。MD5に関しては、衝突(別のデータが同じhash値を持つ)ことが他のものと比べて多いようなので、注意ですしかし、まだまだパスワードは軟弱で、Brute-Force-Attack(総当たり攻撃)に対抗するだけの力がありません。Salt(パスワードと関係のない値)と反復を繰り返すのがhashlib.pbkdf2_hmac()です。得られたhashb'53ce88a1559e955b7b68794225365af09261f0a411629cef554de208e33e8da7'といった感じです。10,000回以上回すことが推奨されています。Pythonで解いてみたPythonでenumerateを賢く使う。Pythonの無名関数=(lambda)について月別アーカイブはてなブログをはじめよう!Delta114514さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。