1. ホーム
  2. powershell

[解決済み] Base64の文字列をデコードするには?

2022-03-06 08:10:59

質問

PowershellでBase64テキストを含むテキストファイルから通常の文字列を取得し、それを $x . 私はそれをこのようにデコードしようとしています。

$z = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($x));

これは、以下の場合に機能します。 $x がPowershellで作成されたBase64文字列であった場合(しかしそうではない)。また、これは $x ファイルから取得したBase64文字列。 $z は、単に次のように終わります。 䐲券 .

何が足りないのでしょうか?例えば $xYmxhaGJsYWg= のBase64である。 blahblah .

一言で言えば YmxhaGJsYWg= がテキストファイルにあり、それをこのPowershellのコードで文字列にして、それをデコードしようとしたところ 䐲券 などがあります。

解決方法は?

エンコードはテキストをbase64に、デコードはbase64をテキストに戻すのではないでしょうか?ごっちゃになってるような気がします。デコード時に このオンラインデコーダは と出る。

BASE64: blahblah
UTF8: nVnV

は、その逆ではありません。PSでは完全に再現できませんが。下のサンプルを見てください。

PS > [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("blahblah"))
nV�nV�

PS > [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("nVnV"))
blZuVg==

EDIT テキストのエンコーダーを間違えているのでは?エンコードされたBase64文字列は、UTF8(またはASCII)文字列からエンコードされたものです。

PS > [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
blahblah

PS > [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
汢桡汢桡

PS > [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
blahblah