base64の備忘録
とりあえず、base64をしたかったのですが、調べると色々な方法があるなぁ、と思ったので備忘録。
opensslコマンド
一番よく使う方法かな。
$ echo -n dharry | openssl enc -base64 ZGhhcnJ5 $ echo "ZGhhcnJ5" | openssl enc -d -base64; echo dharry
base64コマンド
Linuxだとこれかな。coreutilsは便利だけど他のUNIXだとなかったりするんだな。
$ echo -n dharry | base64 ZGhhcnJ5 $ echo -n "ZGhhcnJ5" | base64 -d; echo dharry $ rpm -qf /usr/bin/base64 coreutils-5.97-34.el5_8.1
nkfコマンド
これはこれで便利
$ echo -n "dharry"| nkf -MB; echo ZGhhcnJ5 $ echo -n "ZGhhcnJ5"| nkf -mB; echo dharry
perl
perlはどのUNIXでもあるから一番楽かも。でもHP-UX11.00ぐらいだと厳しい。
$ echo -n "dharry" | perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' ZGhhcnJ5 $ echo -n "ZGhhcnJ5" | perl -MMIME::Base64 -ne 'print decode_base64($_)'; echo dharry
ruby
$ echo -n dharry | ruby -r base64 -e 'puts Base64.encode64(STDIN.read)' ZGhhcnJ5 $ echo -n ZGhhcnJ5 | ruby -r base64 -e 'puts Base64.decode64(STDIN.read)' dharry
python
$ echo -n dharry | python -c "import base64,sys; base64.encode(sys.stdin,sys.stdout)" ZGhhcnJ5 $ echo -n ZGhhcnJ5 | python -c "import base64,sys; base64.decode(sys.stdin,sys.stdout)" dharry
PowerShell
コマンドレットは便利と思ったけどいまだになじめない。慣れは重要ですね。
PS C:\Users\dharry> $str = "dharry" PS C:\Users\dharry> $str = [Convert]::ToBase64String([System.Text.Encoding]::GetEncoding("iso-2022-jp").GetBytes($str)) PS C:\Users\dharry> $str ZGhhcnJ5
tcl
tclshで試してみた。centosのtclだとbase64ライブラリがなかったのでActiveStateのActiveTCL8.5.11.1で確認。
% package require base64 2.4.2 % base64::encode "dharry" ZGhhcnJ5
curl
apacheのbasic認証に渡すときはbase64にしているのでwgetもcurlでもいけるはずだ。でも少しawkで頑張れば行けると思うけど面倒だから使わない。
$ curl -vu dharry: http://example.com 2>&1 | awk '{ if($0 ~/Authorization/) print $(NF)}' ZGhhcnJ5Og== $ echo -n ":" | base64 Og==
vbs
なんだかvbsが嫌になってきた。
Private Function base64(str) Dim dom, elem, bin, result Set st = CreateObject("ADODB.Stream") With st .Type = 2 .Charset = "Shift-JIS" .Open .WriteText str .Position = 0 .Type = 1 bin = st.Read .Close End With Set dom = CreateObject("Microsoft.XMLDOM") Set elem = dom.CreateElement("tmp") elem.DataType = "bin.base64" elem.NodeTypedValue = bin result = elem.Text base64 = result End Function Wscript.echo base64("dharry")