ストックドッグ

KatoTakahiro。金融系の会社で働くSEが株やPython、その他諸々について書いています。サービスも運営してます→http://fmbrain.work

base64でエンコードとデコードをしてみる

少しセキュリティについて勉強を。

作ったwebアプリをherokuからVPSへ移行するにあたって、少しセキュリティの知識が必要になりました。

何とか移行してサーバーにファイアーウォールを設定して、ポートのhttpとhttpsのポートだけをとりあえず開けましたが、他に何をするべきかわかりません。

遠回りにはなるけども、この際、ちょっとセキュリティについて勉強しようかなと。

株系のこともやりたいけれども、少し休憩しています。


ということで今日は簡単なセキュリティの記事です。

base64はとってもシンプルで汎用性抜群のエンコード方式

MIME等のプロトコルでも使用されます。

しかし、あくまでもエンコード方式です。

#base64でエンコードした文字列
Y29ib2wgaXMgZm9zc2lsCg==

人には読めませんが、方式さえ知っていれば(みんな知っている)簡単にデコード可能なので、セキュアに保ちたいならさらにハッシュをかけるなどの対策が必要です。

最もシンプルなbasic認証は、ユーザー名とパスワードをbase64エンコードしていますが、セキュリティを担保しているとは口が避けても言えなさそうです。

ほとんどのブラウザが対応しているため頻繁に使用されていますが。

#ちなみにさっきの文字列をデコードしたら...
cobol is fossil

(ただのエンコード方式なので、デコードできるのは当たり前ですが...)



本来のbase64の目的は、どんな形式のデータでもbase64に変換して送ることができるという部分。(おそらく)

画像でも動画でも。

base64に変換してみる

base64エンコード手順です。(wikiからの引用)

1. 元データ
文字列: "ABCDEFG"
16進表現: 41, 42, 43, 44, 45, 46, 47
2進表現: 0100 0001, 0100 0010, 0100 0011, 0100 0100, 0100 0101, 0100 0110, 0100 0111

2. 6ビットずつに分割
010000 010100 001001 000011 010001 000100 010101 000110 010001 11

3. 2ビット余るので、4ビット分0を追加して6ビットにする
010000 010100 001001 000011 010001 000100 010101 000110 010001 110000

4. 変換表により、4文字ずつ変換
"QUJD", "REVG", "Rw"

5. 2文字余るので、2文字分 = 記号を追加して4文字にする
"QUJD", "REVG", "Rw=="

6. Base64文字列
"QUJDREVGRw=="

Base64 - Wikipedia



base64エンコードするとき
base64 エンコードファイル

base64 encode_file


base64にデコードするとき
base64 -d デコードファイル

base64 -d decode_file

標準入力からbase64エンコード

echo "cobol is fossil" | base64

#出力結果
Y29ib2wgaXMgZm9zc2lsCg==


標準入力からbase64でデコード

echo "Y29ib2wgaXMgZm9zc2lsCg==" | base64 -d

#出力結果
cobol is fossil

以上、終わり