← Back to Home

PowerShellでBase64を処理する方法

Views: 964

You can try the commands on our interactive shell.

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==

全文:

+IJ0DXa3Rs7BTTDRO6TiiOpuZDAa+Sw6q5KsVaIVFlbu3slezBbND5Bmv/wKY3vHM62ZRcYPgz9cYW+pNxNT28tQs3td9aPOG9L079vBrj17QmF9sLt4h1Fbn6Q6M/nZbcwalIxtBHuiLJpi4aqfb4gKP5wKWTQuQwjRCvA2MQJfKawYyoXL3Ep90mRy+gbRv+MWfIkiG9VNYP0/5if9oc9uTSfUUF1Td97qYFCA2WnzJRmWqtnZH8QfRV87f5V2TSVaim03G/d0GGpOKFvv1EQFA1lb7WjnQjE6gt43VxMST10+jJlx4CzwIu9GKs/z/IioCeSPpbR1E3Cby18htFns0K/bsRpN4iLjGbBE/Gc2+CCcyfESSo4tUw0FNtbldV1YXgwGs5Byh212fjW5SgsMKFhOmelrzcQJ3Nk8OOYqK/PYWtEz6/mjN5jEbkF6CJEnyIMFQQBYdta7tlrnzl2SxnYfy24LZzvD/Za3XrLKScx4Mk/G58A9RHUtIh01CQSxZxaXKCIt8aHRr0jennWA7GOVDb97VHcDuCI3iCGKw+oY58GBbmV+rjnjm+rp9tJLPmKtWCu2c5SBo8m3RefX9fTNw3CMgRVSh2rpfQl8LwMjme5ZTP9flNTzxdO4LI6qcI6nFZGDMFSqtLQU60AhGA3Qj9P02IwaTS7v3uaE6dfRLqytjI7HUS/X3RNsEl9yQ0zAbQPEN5YOLwOveWNTIi70DoBl2/QbKh1lmW7H1A/3UWxDKlTNRGURoLq+dzyVNsb4u2Iy0LuV75ooShna3isxg/yoerSeMyFGS1g8ojQp6QZAYxMpbnJuXWAwih67+MuQlCXFsb3qQenzHwjh/He1xLgKmIGsIMWoKC4LYzgO2mtD2ZpgTyXuqztW+tTQZD5KT/FN8E8LDaB5qtDd3UQjApQVZPFN51wmocXwuNEifwdOxdtD1KulCuir8J3Qv9PC0wKLZzdqZ+umgxLo6Fk/ubdOrcPoRrXGRAHjGr/QtaMl1lkH9H6R9sr27Ch3vV4XHXUUDnk03wCxsZkmTekh0FjE14uR2sZEM4MahPI9o9ZeMaSbw9o9CNqeEwJqaZg/KROOfvWzrMRNiCXNpMC7CUnGu0Ptwp/ik5bKX6hZepBuGJgHb+XlHBXgDuxue0RPvjOEHR20Xqv1uu3qry0QOJ9KzbR9hrTT2KZlYKMS6ai6vnf/SJ14iypIjRX4Wg0pua8S0H+jglb5s3YkutJZt1AKgHuL0zE3dJgflG8s4+fr0hgWAxf62ak8WNeXDdf93j2TdbAP0n585xmYq5dfFD/OXgqd/0x5MjfCKLYkRbsXm43oA3/D9x0kzoDaTENxujk0e0ovnf3I054bZSZbPnesqaRgPi1R9PhGm/hd3O5K25Py4jRttTB5t6nbMrZ6QmxTjIuL1KWTx6bKZff2zwRi3bDWNseJLV+LRpFJsoihyTtD+Zha/+yTPfgGGOJehaSmPYD0jUi2GGOP4SJ0ZE5ovMhq6/RCteMiVRYdaEre3VTYdb7fUIY+hUA3TzhavfgJqXpEnEwjuqUqWpKmjzaNykMt5gSeB2aANaKRxG9GfXUZcZ6gceMoyN/jtAdUWo3nbG4kir85nZXjWdy8w0Hk00Il80BFobwxkAgTk3ZFsk4v3Vkv9kv4jx+JEi5KR+jkXCicE/z0T0vRMTuH01skqR1QDvTw1XlWu9TnaTaFDoCXYvwJY34Z+ku7id5oiCqnRXti

2. PowerShellでデコード

$base64 = "44Ki44Kr44O844OX44Kk5LiW44Gu5bCP44Gq44KL44Gf44GE44Gm44GE44Gm44CB5LiA5Lq644GZ44KL44Gf44GE44Gm44GE44Gm44CB5LiN44GZ44KL44Gf44GE44Gm44GE44Gm44CB44GT44Go44Gv44CB44CB"
$bytes = [Convert]::FromBase64String($base64)
$text = [System.Text.Encoding]::UTF8.GetString($bytes)
Write-Output $text

出力例:

ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。

(全文は青空文庫などで取得できます[1][2])

まとめ

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/

UJcqlwAh3mCKxczYpAWq4Idq7vNJsWm5JkI5CJKVRQA9Bx+p4PBgki2BIJ8JmgwPTtQ1kgvJTpC/uzqHPC8P1dlgCsHDNpx5VvubwjCDzeP9EqMEC13rAnWqPPr9F5ynRerGHzZEG+94u7HIUntCkXNOvX2f6ncnhNS7DhB0F5A/28/2oIqPAuYcN6Pgkb1RV6H0iD0YaMwuq2UMeGoL43JaJSvrO5CWO9JzGIeJQQUlt17dLU2IESLAk3rB7930MRnitkKf2ZteWL5o0TGuAI0BS+dQnshDMe0fMax0ducm3TJDHFanSY4Ku55HLK7+oknnBeq0BlDJBWPpedwcvBFFczFaWcgtnxQ+h/OuWYUt8o4YyqriF+fGscQzbclFwsOuMgNdGF1itBkWDwYEpbn0mEnYb2mo4Rj4KBkIgVcXWp9qZdrT79txdi0fdtPaMspr3v6ZH+/gyIqsdSFUYO0fbep8wY2MeuWKW4hP5tCLSJke/LySbJG7p/eCFXxA8OSQsvqA/AuSHHAu8YIyh3VDI/VXbghsfnciobMMEKe1fC1QQRtrKqVeCBG3rwh9MF3kzsDj0xAUOg2YqOxibbtlFtyXsxKpaqZNylJ08eNUtVMu7dZmJRH2s8/aBTULndXPw2hGmdY5Z0yHERZnZF+hUQFwpdsQC5+ZYvhfpm2rX14kkokCgYXwwPb0XZhl6dboNJggJUST7FvOZNCtV5xC/CEFIe0oUnr/FZgHZwFYkNBJ70idJGixIm2jvOQvPXZCER8PmZ2JFOqnTy76dwA5R3XtLkzh/9/HlW4qtiXJNwnJr/RZGZfxGSqpZvMJ9ckJlwRkYPcbXSa/+ptLoarYbqEG6ivueepPKpOrH8JEB+9U59gZGMGW/e0SrkbhOmCI1vbPuwifW2PEvGNvnAFtRLJ0JsDxN+TnhoaPR5CUQ824VwuxP9KW/r330FI5WlDpCd0H6qXupnE6FEnY4fWj+pHCoAkpsMw7Kr6eOV+dCLtbCyc3crd8ne4HzaSuFn4A8a5NfbcBaSK4wOnGdzm5NcbL2fnP47FmKtjMzYVH58E0XmobXyf4+KbN8noIfE7/32E/iJHXnaivtu3lGwX8KnuVe4eXN8XVcUBYjsCaSYXIkf0ypHVsvUIDGRg6g48gZvF98GSLABKj+ZQYxCeLSsRLIXhEvEcnslm3qGQTeb3486MeHJAQrxWQ5Vpu/3bwCl+7/eEfCdnaTdNmgVHxFro36eNg29dXBYO6CyCWKqHMiCw/m+7iMS7UFR8gFu3nyfej3NfOOauDjlJkRIjiVwM42IxM/z9yBGyz0Fi8ol1g8aBVXx0CXWA9usEElZeDlozBZHfIJhqkdSDJ+uhf4XQQxUCKcFCY86WhsJl5v+pROaF4N6tX9MLs7QQFxgONdkJGzAB2sGmnZI9NS9Qq+DEeSGMYFfa5NyikImexZnTGMLzMKCT1FDBdHAZkiNJocT4WzOPrL2A5pmpbYbgsnwVgb+Vr3/R+GjvhT/z4StXVhnqxiYul+ngw0+dohrToDd65aRf/Rqae1owdY3hZtN0+c+NuilvLnWVyK33cJBrUR7CTAEXk12ZAoxmmxC9bQCJR6dH4Om/xhoRdrVOJ9ZnIclqul/464wx1nI3JVT5vl37RoxEnkNysoy4a/TzNsAUKvtTb9S9NZRYkjRHlA1XbQfacJWd7ykfodqyOzCLFDjOtV0u0fVwMFIlqgGDAKJ7AGaX/UhND

Try it Now!