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==
全文:
objTyHWJTxkneYqWNr06Afc2yfl+TKMdKNJAFWLTwfLktuvWq58zXlwstwk3rkRlVuoNEeb0Xw7kPP8zs22Rop8Rqmk1rJNTlYFc/3HTOBks7N1Hju0+MlI0NcH9xbJo+GqDFm5ja5HhEwQti+z3Vbmw6aRrRQV22Fjv2m1tQmPicy5hIX92NhRDaWBMLtUJceq3/9KTe+2zOXWMxfDQ2DM0u6BZTFclM8BmyCbHilNLoPxxCD1KEqGsAe1Nl1bb5WK0Z4zK1zH+vqaLsTbwSHLTjEpuR2CuFMtUrcuYQp5LPRJ+LJKVr/JoKIUPrgOuQIwKn/o/znYpN+7J67KBRbRJP61DJOHyoItsfIZNNra+BFsBU6/sTJEwhLl7TVqdrCqwxDHnudWw/vT7+OxlwiiY/XIGk0RxUxmfJ5IsHO/kEbq6Wexagb7W4seooLlhixmtxHJFUoFUApFeYz0g9OJ696Ej0DcaHHFI/VPN4NkWeMAcuQbbvueEKUybgBXHEsAHcoV2nRKGNUtDvZl3nMhTu0XMRq0mm6cCZc6PbLBu7RgBCX8/HBWhdKouYdIg0CPkyOTe9IX+jmQyP5mYtnA4XeW7qsjKSMVInq8I6hmzZ6XlqLnwlZkOqwWiXh/NCG7cNZBx9JbUR2KV0XeRHPhdPKQoPiT0/7+zNzERHiwGcK6PdNfCpB/E7fIe0RnT4F3Nb0DFpJhEVRGhtRz81q+k8XE2awNmD8RP/8BisaDjGdZB3kE9FAAJHJBAaFSZzWY44dg4Q4OKui7ikgH9kCCT0TlOCr6gtxlLwfGUAvSoy+rKG8+u8ikGFonaFQMbPGYVEcC+iTPVpz+25irnpOm+E+DhZkQMZiR0+ZMlEwT+MBFB3a9xTaDAt5DCV3D/HjrtX8egTWJ2W7m/0Y9w7o24U+q9GnkFb7iOQDzAKoIdN32lxVNGl1jTWNsXa1wLXuIF/Ymttxw4B14tEPR4nJAyv+27fAdUMyZ0myGJ40btF8y/P6KcOPt7vajIJLmmlktZ2kTT5a4DwsHSait8MUR7XiltAK+1iEs6jGC4m06fU3Dhn0XgHW4f8hbQoB6biv/DAi416V7iwP4M/Iv0S/QjO/2fUOlCHfUiMRVZ37emu0KIxSdao0YEu1Ae6V2du3QMRnOKxwpgBpRvWBbKmvPMwPQvDe1Sj6x4/DizeaYpGr3Reu8BeCvIiHuELGl9QoZLP4F0x4zYRgKr3OMFNpTLAGB9VTqGGbmHQPleo9eauD4ECa8wT7hrUacA8i7mdOrpkE7KJmoN64AJPYB8WPIct0ZQnypsCbjZ2y3VhaF7I4ELjK8s2ZzGdMX73G+e6NrFNMzbkvINspB40jDw/BvjXFwBWZPuGTfyQ/AH2soTbpTx50fstd0+1MHZUCizVVTVOstccE3yBl9gvoD75fqyQ+EP4jGsDpFPRSFidX7cPGPzSlZwA0myRxsBrJIlwkyMxcBBi6ZDlAVDcGwXN08hXsNjeqezooiWZw8HOQVpuoa7X+7Sm1zlcNCmPxbBlbJGIUaAEr11Ns305xFoJVVBnDEY1QMGbAwu1vobf0UvUrzdb7Vijv0K/ogt8wPTOTp5NiG1lv22i4MO/oGo9Hc+zAMGUNONd/g+5U4j2bfem9YWXzQkn5JB1SEaOdb79vjqylaIns1q2CkzCZl1hjVuvqCY+WbG5WgQfXMq7/mPG6ol81WGB1puKTyl9UpPpD7xm/FmUGLi5C8C
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/
YU2OSKggDpEvqVXSQd25wlCkRSvH8urQLtpXzni5n/90g/AMBnSFiqBiXFUZNqbI2cUu4uacbmnu184ULrseGCOapgvqjh/pr10zJHR6GEZaWLuF97MZBHgc9oqejHE5csdT2QJsF/Mhn60ptlqAC6ThfQV1MTrlVqzHBl3T/DmqhE608r+QtMATxvNVna/ElIihcIXx88jf8eJLcVvG4Iu38fH6r8VoVMR9eLhy8DQ9msM6y/LHnRGfcHUfT3iclkyA1zRFfXLsa9naJloUGDsl8gtm+zmprNY/KAtHDZgU+i0ix25kyMA/xpaXhw6wF9UQryWYTrNqPPfYC5Yva0sPXa2++GPqP76J3Z/1f26BY80F8GV0py4CI0IpANMPv195BCqImjMdEvAUU/TDK3rT4FHaWwmCeVYXKTdpLUCSuZ/qYuVIjicslP2TsH4LVTiZdXZW7W17EfUO3XOhpxescQuQ0V03oczlp+DlbkiMhRd/dbfSh78XkZboF185dII82JuASCNvf5DjQvxHdlE6vtcCAgyhbqtKYzP9RBhOnY7xbS1+YHgi2Ech9pq7vnCxMB6PFkM/xXci+a6OGG9NVdrP1ZgPVIis9gcxIu6qffyV8mzEgujCTB9SOb6umDJa5I02F1YtXStcKI7qDMFYRAXWQ3bZw65oYBltxXY022J/cgI7vjO8++J5dN4siNAtB8jDlQEn70zJUywdIapeyV2bZ7ZsVIP38+YLn+3i0EdO1xd6+sbJDOVMW0BBn0iktnNE0bjXA0N6+DFmruMxK6wx7GfWY9n1iO3dvIC4KOKShB5+RQeTLJ+YmB0rBD9FJdqtw20XWk/+pjyHp1uRy1PBUALwrghtZoayLhMY68Y88Z0WsqdBNrwL/agsI6RcO1EVb5gWWjvvU8mOiVnA32zrsISmWkVEP901k/awd14wrW0urEOXU7RIzVPfeDmAS06uA33WDEa7R5ubdMyCqtrv1BcyybV/QdlA0rSnYBiQJ2BRA2Q5lZqRN7/jMNYk+ypF0Eo2y5QG4wPch4RfHuxiYr2s1RlS1UH+i5ECDxS0NbyIfgtukOcWpGpNglhnapbilkeL+ajdfpzNqZSBzFRlhUJu87frvj3J/a7IvuOR0L0h2V1hsaEoUX/fHKIRTPt+aLCYD5mtl6YsWhsvHFnJ6fpVieKnAszzqsr1pUFJbGwGbIOujaYCDwrByezakYBLnMMCruILrgOEzu1uyit9yk76nDaM3Whv89SZTmmOXmaWscoAk68irqkrT0CS2c0IYR4jk83nv1Z8Z4ucLcz8DYkmov+cALJZue23B/ZJfSIK20OVEGHX79OU0tSRxaowWm62jGOWXegmi/Ac+FOCRgGFFOO/wMHYhjUBGaWCTJUHN+yat78l1e/JRoImfDGik9k4gau8UOr67hePy+3ZsL762z7fWCdbyGcTOkG8bqzzsaCQPt5A6tPkLCseGgAPiiPyuKJDr2TWaxG8uMT7h7ier6HXaPGVzVQ2cZ03ADO8YedpUyrUQQ7urRJNVrBzitXcYvUz+ST4+xcI3jX+oJQkuN5HRBXY3clCCIXdcTfalPbBEJRC8YySqZ3D0WRU+ArnGuVkJBrPdQdaQjqhFIMgFEYxykK2QULaGj1Vq2YbEjCQWWMaRkaMNwQDAj8hHxrLTl2dcxDJ7slrjuTSDJOK7mn5jbA4hcr5jQHQYtbv3Zfi4Q2J3tIP8+FKEQWFPHv935+a