python3でbcryptを使ってパスワード認証をつくる
タイトルの通りです.試したら上手くいったやーつなのであまり当てにしないこと.参考文献は一番下にまとめて載っけています.
bcryptを使って.htpasswd
ファイルを生成してBASIC認証実装している日本人はビックリするほど存在していないようで.役に立つ人もいるかも,と思い投稿します.ひょっとしたらBASIC認証自体が弱いからわざわざこういうことしないってことなのかな.偉い人教えてください.
.htpasswdの生成
以下のコマンドでファイルを生成します.
htpasswd -Bcb .htpasswd user passwd
詳細について全部は説明しませんが,大文字のBがbcryptを使った暗号化を指定するオプションです.
\(๑╹◡╹)ノ>>>htpasswd Usage: htpasswd [-cimBdpsDv] [-C cost] passwordfile username htpasswd -b[cmBdpsDv] [-C cost] passwordfile username password htpasswd -n[imBdps] [-C cost] username htpasswd -nb[mBdps] [-C cost] username password -c Create a new file. -n Don't update file; display results on stdout. -b Use the password from the command line rather than prompting for it. -i Read password from stdin without verification (for script usage). -m Force MD5 encryption of the password (default). -B Force bcrypt encryption of the password (very secure). -C Set the computing time used for the bcrypt algorithm (higher is more secure but slower, default: 5, valid: 4 to 31). -d Force CRYPT encryption of the password (8 chars max, insecure). -s Force SHA encryption of the password (insecure). -p Do not encrypt the password (plaintext, insecure). -D Delete the specified user. -v Verify password for the specified user. On other systems than Windows and NetWare the '-p' flag will probably not work. The SHA algorithm does not use a salt and is less secure than the MD5 algorithm.
上記のマニュアルを見れば分かる通り,他の暗号化オプションはだいたいinsecure
と記載されているので,みんなbcryptを使おうなというお話のようです.調べた限りでは,実際他よりも安全らしい.
Python上での実装
生で実装とか無謀なので,ライブラリ使います.
pip install bcrypt
あとはライブラリに実装されている関数を使う.が,その前に.htpasswd
そのものの中身を開かないといけない.
import bcrypt def basic_check(user, password): passwd_file = open(root_path + "/../config/.htpasswd", mode="r") hashed_line = passwd_file.readline() passwd_file.close() hashed_user, hashed_passwd = hashed_line.strip().split(":")
strip()
でファイルに含まれる改行を取り除いて,split()
でユーザ名とパスワードをわけて代入するところがミソ.↑の関数内に以下のような一文を加えて判定する.
return bcrypt.hashpw(password.encode("utf-8"), hashed_passwd.encode("utf-8")) == hashed_passwd.encode("utf-8") \ and user == hashed_user
bytesにしないといけないので忘れてはいけない.あとはこれをWebアプリなりなんなりに実装する.
以下参考文献.
pythonでbottleで暗号化パスワード(.htpasswd)でのBasic認証 - Qiita
Salt and pepper - How to encrypt database passwords
CRYPT_BLOWFISHのアルゴリズム$2a$, $2x$, $2y$について英語のドキュメントを読んでみた | kanonjiのブログ
python - Why can bcrypt.hashpw be used both for hashing and verifying passwords? - Stack Overflow
python - How to store and compare password in db using py-bcrypt - Stack Overflow
ブロガーが承認欲求を満たすための自動化レシピ2つ(そのうち増やす)
こんばんは.
ブロガーペーペーの自分でも,GoogleAnalyticsのセッション数とかページビュー数が増えると「やっほい」となります.なりますよね.でもいちいちGoogleAnalyticsを見るなんて面倒臭すぎて死んでしまいます.
他にも,Twitterで自分のブログの記事が言及されると元気になりますよね.なりませんか.私はすごくなります.
これら二つを適当に自動で自分のSlackに流すようなものを作ったので,その記録用に書いています.ぶっちゃけ前者(GAのセッション数,PV数確認)については私は新しいことを一切していないのですが,まぁ一応,まとめておこうってことで書いておきます.
GAのセッション数,PV数 → Slackへ自動投稿
こんな感じ.良い感じですね.うちのSlackにまた新しい玉藻の前が増えました.でどうやるんですかって話になると思いますが,この記事みてやってください.以上.というぐらいこの記事が有益です.
GoogleAppScriptのソースから何から全て書いてあります.
ひとつだけ注意点を挙げるとするならば,この方法は画像を添付してPostする必要があるので,新規にBotを追加する必要があります.俗に言う個人開発のBotは多分Slackでいう「App」に該当するので,そちらを経由してこの方法を使おうとすると私のように小一時間ハマります.おそらく別の手法で行えるとは思いますが,少なくともこの方法では出来ません.
Slackのこのあたり,よくわからなかったけど,FAQに質問そのものがあったので,そのうち日本語にして記事にするかも.「How are incoming webhooks, slash commands, and bot users different?」のあたりです.
Twitterでブログ記事に関する言及をSlackに通知してもらう
これについては想像している人もいるかもしれませんが,IFTTTでレシピ作ればいいだけです.一発です.
@zoyander We don't currently support user published Applets. Sorry about that!
— IFTTT (@IFTTT) 2016年11月8日
残念なことに2016年11月のアップデートでIFTTTはユーザが作成したレシピの公開ができなくなりました.ので,私が作成したレシピを公開できません.仕方がないのでレシピの作成方法を共有しておきます.とはいえ,IFTTTに慣れている人からすると,そんなに難しいことはありません.
まずトリガーとしてTwitterを選択.
で,「New tweet from search」を選択(したの方にあります).要するに,ブログ記事のURLで検索して新しいツイートが見つかったらそれがSlackに流れてくるという戦法です.自前で実装しようとするとAPIの上限に引っかかるとかでいろいろ面倒なことになりますが,こちらならそんなこと気にする必要ありません.便利ですね.
で,実際に入力する内容ですが,わたしは「siganaitohoho.hatenablog.jp OR mobile-games.hateblo.jp OR prpr.hatenablog.jp」と設定しています.要するにブログのドメインを指定してあげればOKです.大文字で「OR」を使って繋げると複数一気に検索することができるので,ブログを複数運営している人は便利かと思います.
でそのあとSlackを詮索してPost to channelを選択.この後は自分の通知したいSlackのチャンネルを選択して終了.特に弄る必要はありません.
以上です.
まだ2つしかありませんが,ゆくゆくは増やしていきたい所存.とはいえ,現状の2つだけで僕の承認欲求は既に満たされている気がするので,満たされなくなったらまたなんか通知を自動化します.以上です.
できる逆引き Googleアナリティクス Web解析の現場で使える実践ワザ240 ユニバーサルアナリティクス&Googleタグマネージャ対応
- 作者: 木田和廣,できるシリーズ編集部
- 出版社/メーカー: インプレス
- 発売日: 2015/03/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
(IFTTTの本売ってるんだ…….)
ゼロから作るDeepLearning 3日目(ぐらい) 3章途中〜5章途中
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (11件) を見る
相変わらず,Mac上のJupyter Notebookを使って本を読み進めています.
ここ1週間ほどちまちま進めてはいたのですが,記事に書くほどガッツリ進めてはいなかったので放置していました.完全に記事書く方のが面倒くさくなってきているやつです.
内容自体は,実際にニューラルネットを実装してみたり(3章),ニューラルネットの重みを更新してみたり(4章),誤差逆伝播法を勉強してみたり(5章)と,ちゃんとディープラーニングしている気がしてきて楽しくなってきました.良い.
本書の途中でReLUレイヤに関する説明が出てくるんですけど,最初「なんでこんなレイヤ噛ませるんですかねぇ」と思っていたら,微分した時に「!」ってなりました.いや,そりゃそうなんだけど,言われるまで気づけないあたり数学力がお察しだなぁと.
機械学習強者になるためにもっと勉強したいですね.今年中に以前ブログ経由でいただいたはじパタと緑本は完璧に理解したいところです.頑張る.頑張れる.多分.
内と外からの圧
今日,M2の先輩に「はやく就活切り上げて研究したら」という圧がある発言をされました.とは言え,本人はめっちゃ優しい人なので,そんなストレートじゃないし,何重にもオブラートに包んで言ってくれました.優しい.
うん.そう.知ってるんだ.自分でも分かっているんだよなぁこれが.正直ここ数ヶ月,本当に進捗と呼べるようなものが全然出ていないので(研究そのものをまとめる作業はメンターさんとなんとか終わらせたものの,それをすすめるみたいな事はぜーんぜんやっていない,不味さしか無い),自分も正直ドン引きしている.
先輩に外から圧をかけられたけど,それ以上に自分でも内側から圧を感じているんですよ.焦燥感をひたすらに感じている.修士学生なんだから,就職活動なんてさっさと切り上げて研究しろよというのは本当にその通り.天才的な能力があるわけでもない私は継続して研究し続けないと確実に成果も出せないし.勉強しないといけないことをくさるほどあるし,読まなきゃいけない論文もたくさんあるし.
とは言え,ファーストキャリアとして何を選ぶか,どの会社を選ぶかと言うのを研究のために投げ出せるほど私は研究にぞっこんというわけでもないので(実はこれがマズい気もするが),そちらに専念してさっさと結論を出すのも正解のような気もする.
というか,冷静に考えると,世間の就活生は3月~10月で内定獲得まで行くんだし,私12月からはじめて3ヶ月程度で就活終盤になっているだけでもマシなんじゃないの.そうなんじゃないの.それでもまだ早く終わらせるべきなの.ぐぬぬぬぬ.
でもまぁ,その間研究しないのもバカですね…….頑張ってちょっとずつでも研究しないと…….する…….
ゼロから作るDeepLearning 2日目 OSX上での環境構築~3章途中
はい.
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (11件) を見る
今日の目的は持ち運んでいるMac上に環境を構築して,そこから続きをやるみたいなやーつです.
anacondaのインストール
Download Anaconda Now! | Continuum
環境変数の書き換え
zshを使っている人がほとんどだと思う.インストーラは.bash_profile
の書き換えをしてくれるけどzsh側はやってくれないので自分で書きます.
export PATH="/Users/「ここにユーザー名」/anaconda/bin:$PATH"
jupyter notebook themeの変更
初日のやーつをそのままやればOK.
[http://prpr.hatenablog.jp/entry/2017/02/17/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8BDeepLearning%E5%88%9D%E6%97%A5%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%EF%BD%9E2%E7%AB%A0:title]
あとはゆるゆる続きを解いているんですが,行列普通の演算だと思って解いていると地味にハマるというか,np.array()
に1次元のlist
を入れたときの挙動が代わってくるのが,ほへぇという感じ.だから書面でも1次元配列と言って,行列と言っていないんでしょうけど.
確かに[[1], [2], [3]]
とか書いて3行1列の行列を示すのは馬鹿らしいとは思うし,オプションで縦か横か示すのも馬鹿らしい気もするので,まぁわかるには分かるんだけど,分からないみたいな.なんなんでしょうねこれ.
有名な手書き文字認識のMNISTデータセットを処理するところまで入ったので今日はここまで.jupyterの適当に書いても動く感じ(import途中で書いてもいいとか(本当は良くないだろうけども))とか,その場でメモ取れるのとかがだいぶ楽しくなってきた.今後は全面的にjupyterに移ってもいいかもしれないですね.問題はこれを制作物として認めてくれそうな企業が無さそうって話でしょうか.しょんぼりですね.はい.
ゼロから作るDeepLearning 初日 環境構築~2章
というわけでね.始めますよ.
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (10件) を見る
研究室にいて今までディープラーニングに触れずに生きてこられたのっておそらく私だけだと思うんですけど(研究分野的にズレていて,分からなくても生きていけた感じがあった),さすがにこのままでいるのは恥ずかしいと思うので今月中にこれを終わらせたい.
というわけでやり始めました.
ついでにいい機会だし,JupyterNotebookも使い始めました.とりあえず背景が黒くないとプログラミングできないマンなので,これを使ってcustom.cssを編集します.
ついでにこのテーマで使えて良さげなフォントをインストールします.
色合いがクール.その代わりグラフのメモリが黒くなって悲しい感じ.matplotlibのオプションをいじるとか,そもそもseaborn使えばいいとか色々思うところはあるので,そのうちなんとかします.
ショートカットはこの辺を見ると参考になる.
けど,それ以上にコマンドモードのときにhって打つとヘルプが出てくるので別にそれで良い感じがしてきます.
本の内容については,単純にパーセプトロンの構造の話が出てきて終わりという感じ.NANDゲートを使うあたりで「別にNOT用意して噛ませれば良いのでは」とか思ってしまったが,重みを考慮してほげほげすることを考えるとこっちのほうが良いんですかね.
で,肝心のニューラルネットワークはまだ出てこないので全然.まぁ,まだ2章だからね.これからも継続して頑張ります.
あと,並行して流しているdアニメのカードキャプターさくらが最高すぎて最高です.
カードキャプターさくら クリアカード編(1) (KCデラックス なかよし)
- 作者: CLAMP
- 出版社/メーカー: 講談社
- 発売日: 2016/12/02
- メディア: コミック
- この商品を含むブログ (4件) を見る
早くクリアカード編読みたいからコミックス全巻買おうかとも思ったんですが,やはりアニメで丹下桜さんのボイスを堪能したいと思い,でも時間は無いし,ということでパラレルにやっています.バグがあっても深夜に一人で「ほえぇ~!」って言うと何とかなりそうな気がする.絶対,大丈夫だよ!
うっせー研究させろ
タイトルはここ2習慣ほど就活を完全に断って研究していて,ガッツリメンターさんにプレゼン資料についてザクザク刺してもらった感想です.いや,メンターさんに莫大な負担をかけた点については本当に申し訳なかったと思っているんですけど,それ以上に「はやく自分の研究をちゃんと進めたい」という気分になっており,さっさと勉強させろという感じです.時間寄越せ内定寄越せ研究させろ.