base64でエンコードとデコードをしてみる
少しセキュリティについて勉強を。
作ったwebアプリをherokuからVPSへ移行するにあたって、少しセキュリティの知識が必要になりました。
何とか移行してサーバーにファイアーウォールを設定して、ポートのhttpとhttpsのポートだけをとりあえず開けましたが、他に何をするべきかわかりません。
遠回りにはなるけども、この際、ちょっとセキュリティについて勉強しようかなと。
株系のこともやりたいけれども、少し休憩しています。
ということで今日は簡単なセキュリティの記事です。
base64はとってもシンプルで汎用性抜群のエンコード方式
しかし、あくまでもエンコード方式です。
#base64でエンコードした文字列 Y29ib2wgaXMgZm9zc2lsCg==
人には読めませんが、方式さえ知っていれば(みんな知っている)簡単にデコード可能なので、セキュアに保ちたいならさらにハッシュをかけるなどの対策が必要です。
最もシンプルなbasic認証は、ユーザー名とパスワードをbase64でエンコードしていますが、セキュリティを担保しているとは口が避けても言えなさそうです。
ほとんどのブラウザが対応しているため頻繁に使用されていますが。
#ちなみにさっきの文字列をデコードしたら... cobol is fossil
(ただのエンコード方式なので、デコードできるのは当たり前ですが...)
本来のbase64の目的は、どんな形式のデータでもbase64に変換して送ることができるという部分。(おそらく)
画像でも動画でも。
base64に変換してみる
1. 元データ
文字列: "ABCDEFG"
16進表現: 41, 42, 43, 44, 45, 46, 47
2進表現: 0100 0001, 0100 0010, 0100 0011, 0100 0100, 0100 0101, 0100 0110, 0100 01112. 6ビットずつに分割
010000 010100 001001 000011 010001 000100 010101 000110 010001 113. 2ビット余るので、4ビット分0を追加して6ビットにする
010000 010100 001001 000011 010001 000100 010101 000110 010001 1100004. 変換表により、4文字ずつ変換
"QUJD", "REVG", "Rw"5. 2文字余るので、2文字分 = 記号を追加して4文字にする
"QUJD", "REVG", "Rw=="6. Base64文字列
"QUJDREVGRw=="
base64にエンコードするとき
base64 エンコードファイル
base64 encode_file
base64にデコードするとき
base64 -d デコードファイル
base64 -d decode_file
echo "cobol is fossil" | base64 #出力結果 Y29ib2wgaXMgZm9zc2lsCg==
標準入力からbase64でデコード
echo "Y29ib2wgaXMgZm9zc2lsCg==" | base64 -d #出力結果 cobol is fossil
以上、終わり