PowerShellでBase64を処理する方法
PowerShellは、標準の.NETクラスを利用してBase64エンコードやデコードを簡単に行うことができます。ここでは、基本的な使い方から応用例、そして芥川龍之介『羅生門』の一部をデコードする例まで紹介します。
Base64とは
Base64は、バイナリデータをテキストデータとして扱うためのエンコード方式です。主にメールやWeb APIなど、テキストしか扱えない場面で利用されます。
PowerShellでBase64エンコード・デコードの基本
エンコード(文字列→Base64)
# エンコードしたい文字列
$text = "こんにちはPowerShell"
# 文字列をバイト配列に変換し、Base64エンコード
$bytes = [System.Text.Encoding]::UTF8.GetBytes($text)
$base64 = [Convert]::ToBase64String($bytes)
Write-Output $base64
デコード(Base64→文字列)
# デコードしたいBase64文字列
$base64 = "44GT44KT44Gr44Gh44GvUG93ZXJTaGVsbA=="
# Base64文字列をバイト配列に戻し、文字列に変換
$bytes = [Convert]::FromBase64String($base64)
$text = [System.Text.Encoding]::UTF8.GetString($bytes)
Write-Output $text
出力例:
こんにちはPowerShell
関数化して便利に使う
頻繁に使う場合は、関数としてまとめておくと便利です。
function ConvertTo-Base64($plain) {
return [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($plain))
}
function ConvertFrom-Base64($base64) {
return [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($base64))
}
# 使い方
ConvertTo-Base64 "PowerShell"
ConvertFrom-Base64 "UG93ZXJTaGVsbA=="
ファイルのBase64エンコード・デコード
ファイルをBase64エンコード
# ファイルをBase64文字列に変換
$filepath = "C:\path\to\file.txt"
$bytes = [IO.File]::ReadAllBytes($filepath)
$base64 = [Convert]::ToBase64String($bytes)
Write-Output $base64
Base64文字列をファイルにデコード
# Base64文字列をファイルに戻す
$base64 = "..." # エンコードされた文字列
$bytes = [Convert]::FromBase64String($base64)
[IO.File]::WriteAllBytes("C:\path\to\output.txt", $bytes)
芥川龍之介『羅生門』のBase64デコード例
1. 『羅生門』テキストのBase64化(例)
まず、芥川龍之介『羅生門』の冒頭部分をBase64にエンコードします(例: UTF-8でエンコード)。
元テキスト(一部):
ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。
Base64化:
44GC44KL5pel44Gu5pqu5pa544Gu5LqL44Gn44GC44KL44CC5LiA5Lq644Gu5LiL5Lq644GM44CB576F55Sf6ZaA44Gu5LiL44Gn6Zuo44KE44G/44KS5b6F44Gj44Gm44GE44Gf44CCCg==
全文:
nQNtIiwZV8AWg/LA9jR8pDgBcPP3dPtV5aJXX+p2kvV/y/z3mGdofgFFzkF864JXpvpIDMNHGgPjJO2dYLrKSHNJCBA4mwvWiIqxKX7KFM056TyovUonMysf2+kUWIv+X/0HwIxFpkeoMwLPPwfrvMB+EUuMnOOE4zz0PY0lDiz98VD4WXon/t7tePPRPMni1l4XbCTs71nG3elD1TDR953f8g58vN8pwJoaZlL50rE3YOC8AgpWscUoIoNJf6qAMZJuj6HLBfqhZabOYVtbeoYipb40ntQShswo5ZV2v0JX8Ikyc4Cs7y6ejfpY8OqZLfwRe/PRbflBnAYJzO+Pz7GYM+8YCJ6gydYcOetUJjHbuG1xCN5EG1d7wa8KOINPr0Bz8vG9zW1gUqtiCnKTUlVKjizaiMMnMyfhmJBE/XtN3gIZwxprDgKIFQ9x1d4gKYaaKuG9siUZqtPGNsHgT6Z6liUjQh/rj/SnJQwjoHfWwc8WxSnCYe17SLApnhAgjrrkebU/04UgnK1Ty50GXPwnHECbDIVG+IsrGl1OZk5Ao/zadzC5MQHsgBEZr3pBBx/NFnalV3ETuuEfpa+I7gPpcy4WSAuXeeLx0smevwPhgwM7460icQ+XmcdZeQgtpB4mFutecM7gSR/gvKdrNAo90iOJYoJWIIoZNkevGUTPUDitSPiuGb9llFlZ6R5t3QoIIJGScY3vcgqO1glxK8t/82S345tpolmNUfl2poJocokbPYQmIDew51yiCgJe1+3m0/6kUCqhqN3E9NRu5W/o7RYuIj4BTxdRBA/N2j2LPbwB+pDoA2XBvVPbO3PawI33dRwbf/4LnUIZL/1qu1rm09Spe6AXHC10yHAeCLG7bxd13LhGmAHYOVoiw/pHRFF2ZyInPMU8cdzqONcaJJddfAeXBLG14vPoRJOSSvbQJ0+DzqE+RNHmJ4Z+fvfctYm+0McY4ADPTajHQB9eSC4/MrjWL4pLgGDzGsvWPWv3vGG3eIDcA0PVLs+4OpmFvw8QNoShr2KMHPej3PWuNHMbOwf3prSYwccZnn8S/Cd05yQOci+O7MQxUr7h1t0UFRQpMbcaE0vQrRLx8YboU62HMAw2iPJ60g2btzOc/s6evO98EyL3kydK1U/OOeZW+0iRrpNgujZsEezURcFLASHAbmhBUkfe84c7OU682GEsD+K/VSafOZLysKCccH74fVQvCyS0DWgjdpkuoSMzyOlM/2WWETUl/31R0QVO5+YLpDT1l1jRSL3arTBXzC8ZLcLLRbmH2PSkCLGYu9pZZcUxjZeH89+qXGAgFpjKsyqrh0A/XyWstbItCZfAnKW6V2eNYW90gnqFGwQa8sNmvbeZgMeRdRnHRUzwrRLcDJB7jU6H7BRgB3wDzrB4husGoC+afiXXZOiWU79eXHmOZOaAsnQNjgUX2wri5fLOd4REqwCANq0V9Dqeoy0IkT6ebisL2rnUtHKTUZT/kZWXQkOHTReKxOoCd2ikv70XF6nxDQNveCPLvYwPSqxHyq79aCW4ObonA1yix/Iavk8JIuMxMxOZREkzZrD3OasPnq47nnTtxeNhJC3Fb6+6ppSLEXFJbgUsTwAaxhDHVDvQOQ0WD0vakC2nho1ylAxRXVh+adIyDknD2MDVyq844nBDoEg6pyzcPK49bYsMFWautSWQUQG48IPE20Jb5ebrY5hHwP6eEDwGgIeJc1iL6f4saxT7xdOcplgGGHyB
2. PowerShellでデコード
$base64 = "44Ki44Kr44O844OX44Kk5LiW44Gu5bCP44Gq44KL44Gf44GE44Gm44GE44Gm44CB5LiA5Lq644GZ44KL44Gf44GE44Gm44GE44Gm44CB5LiN44GZ44KL44Gf44GE44Gm44GE44Gm44CB44GT44Go44Gv44CB44CB"
$bytes = [Convert]::FromBase64String($base64)
$text = [System.Text.Encoding]::UTF8.GetString($bytes)
Write-Output $text
出力例:
ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。
(全文は青空文庫などで取得できます[1][2])
まとめ
- PowerShellでは、.NETの
[Convert]クラスと[System.Text.Encoding]を使ってBase64のエンコード・デコードが簡単にできます。 - 文字列だけでなく、ファイルのバイナリデータも扱えます。
- 関数化しておくと再利用性が高まります。
Base64の処理はセキュリティやデータ転送の現場でよく使われるので、ぜひ活用してください。
[1] https://www.aozora.gr.jp/cards/000879/files/127_15260.html [2] https://www.aozora.gr.jp/cards/000879/files/128_15261.html [3] https://hanlabo.co.jp/memorandum/3292/ [4] https://stackoverflow.com/questions/18726418/decoding-base64-with-powershell [5] https://www.sans.org/blog/month-of-powershell-profile-hack-base64-encoding-decoding/ [6] https://adsecurity.org/?p=478 [7] https://www.scriptwizards.net/base64-decoding-with-powershell/ [8] https://stackoverflow.com/questions/15414678/how-to-decode-a-base64-string [9] https://github.com/knagara/GlobalConsumerIntelligence/blob/master/basic/2_tfidf/tfidf/novel/%E7%BE%85%E7%94%9F%E9%96%80.txt [10] https://tommymaynard.com/encoding-and-decoding-powershell-strings/ [11] https://gist.github.com/ab653419a88a0e9b4e3f [12] https://qiita.com/daichi-ishida/items/d0d569aae64a2381ed74 [13] https://help.salesforce.com/s/articleView?id=001116439&language=en_US&type=1 [14] https://stysk.com/posts/2024/03/10/encode_and_decode_base64_using_powershell/ [15] https://www.nhk.or.jp/kokokoza/r2_gengo/assets/memo/memo_0000000135.pdf [16] https://search.rakuten.co.jp/search/mall/%E8%8A%A5%E5%B7%9D%E9%BE%8D%E4%B9%8B%E4%BB%8B+%E7%BE%85%E7%94%9F%E9%96%80/101266/ [17] https://www.jstage.jst.go.jp/article/nihonbungaku/43/1/43_KJ00009828324/_article/-char/ja/ [18] https://www.chikumashobo.co.jp/product/9784480434111/ [19] https://search.rakuten.co.jp/search/mall/%E8%8A%A5%E5%B7%9D%E9%BE%8D%E4%B9%8B%E4%BB%8B+%E7%BE%85%E7%94%9F%E9%96%80/
xqfNfe/hgfPUmzcM3MeSpFaq4aFhwjc4pCc8whSLtxYl/opTUMDQdZSYDSu2C4PSKUFOHhacoE7HtVPzMGiEev23++4sSntX/iaeoYAjuY+6VeDEAYPocqxR9Xo5ykCnmnNoTb6ONoCPK6qUlY0ruztJxjIyZS20GJJxEWQYN6bIe2Pt0663mK3mjNoZy43jGGGwPpCQsoln2A0yRT6FhNJNrFYA3QihR2W9ptWHc7mw55Cjuj0Bsf56QNYA+S2as6yw9nEKJgksfdg9Ze7hOJFFCf1BuGOIoWvyvNFPh1ofV+Mx7coPg0npzKy4O+GNa96cxF4af8hBNtRkToL9xm61SWmd0hu6ZWhZBHeE+UYaM2YCUCi5J1AyeBfCHcACpf6vgwCyvK0UoRywvuj2OZX1PCcd2Vdr8x6StKCbY46JmMmXPQrnmT+F2W/t5MPY0yr4oLblLh1xs2jtkKaJZMMErpl3oNzbEelM/iK60N0kjKD1Y9FUN2XrrjRbmCNzRQa2M/q9M3kaVmaM+MZBJOcv+hQtLJMyrIhJb/+nbGPNjB52qg91rLqe7r3u/HhZd0tvWfZyAV/8iyrIFn7daXxFTQkCm3PTHw0yJxkSKigMkWFrlPauRg/4KlxHobh1gWXFM4FDlXjibH25p2TdLqUAyNbOyvd1hNOr2UpTWSgHwoCWSYtQmpUmusDrCKQ4pfzjZTr3w633D2YifoqAgsEZffkPsCnuGouHSSp43frJ604WtJ+VDFmBdJ5hsAQfQTYP9aghXLRdMPiOWLWOa5JSIppmalxPCQCw0k3t57shWdW9c7vbOgYBklYMGF/jxcgdmThJXjiw/lMVyVYs1AZuDazmtCP+03ZDRavM9Geq0/XmI7UAJpdA27FRrBLHZIFU73zc1Rcz6bdcToNUFkZEobT53EpmZmySx0wCO77cvnAbIw6LOAVM2XB/k+edzI7sYAn2z3DExoHfpg//KhKizanj/kk0BBOZKJmFbdb1sX1dhnFkNye+vhmgdPjsZwX6Afq+SlewT47xvy0oPrj1pDEHx0vl2jF4pEz+chzCmmixvKBkVM3GirZD+/cdclMD7kL3kgUkQnKC5zDN4P3GBN0uqU5hKG1grLFq2+0TJzkdojBGNPaFdslDHZQ+HSX49fkEVPL3yz3ujN/ej19XxA1V6Zp0nHHPmrkPwUL4dI8li0aOQBtEYvyk6ZO5H/9pnRIHMqmXADe7lT/rhEjAOq3wNV1MkqV/tvXi+W7Fa5508k3K+mcUalhWsHqEkKzL8TiODAPdLZqbAjkh9JORWPGUbiQueuiuXiD8wPp0ccsq6uV1GlIrVtPO3QVQ4leiGBEdnACfzLUWwHt7K5pO/mU+9IIVgpyU1ABtba6NRjU5b6txQ4/hPk5bgt9sql8ZbGL1G16u5G8PG1wygpeUvQe8LN1DL2JWabaosPrVBlM296o7LSWLLRVGOjZ8KjDQ65oXVzbPYoxowLLTVR6WzLr562ka31oG/TXrV66Ex7Ptf4yStF5OejoG44Vp09xfvFReTV3pemLBifoWgrfi3UC/RIJ5vK5Ru/p9D03sGZtL9Sb/rgjsAocKfjReOoN7m6TvbC8iqB6ldlhXJqHkTeKv09EfOTsL8ZPk8RxfwqKVqv9TVH6IByUu1zxjskIFna+eMlf+lieVIWCwrZmDllbTpDbgZgcZ1k4nXY6FklT65po7cBrCvmmErui5MmOHPqDnN4iFFHBY