エンコード・デコードとは?URLエンコード・Base64・文字コード・暗号化との違いをわかりやすく解説|サイバーセキュリティ.com

エンコード・デコードとは?URLエンコード・Base64・文字コード・暗号化との違いをわかりやすく解説



「Base64ってよく見るけど何のこと?」「URLエンコードって何をしているの?」「エンコードと暗号化は違うの?」——ITの世界でよく目にするのに意外とわかりにくいのが「エンコード(Encode)」と「デコード(Decode)」という言葉です。

エンコード(Encode)とは、データをある形式から別の形式に変換することです。デコード(Decode)はその逆で、変換されたデータを元の形式に戻すことです。

たとえばメールに画像を添付するとき・URLに日本語を含めるとき・プログラム内でバイナリデータを扱うときなど、「そのままでは扱えない」場面でデータを「扱える形式」に変換するのがエンコードです。

エンコード・デコードとは?

エンコード(Encode)とはデータをある決まったルールに従って別の形式に変換すること、デコード(Decode)とはその逆で変換されたデータを元の形式に戻すことです。

「モールス信号」のたとえ
モールス信号はアルファベットを「・(短音)」と「―(長音)」の組み合わせに変換するルールです。「A」は「・―」、「B」は「―・・・」というように変換(エンコード)します。受け取った側はそのルールを知っているので「・―」を「A」に戻す(デコード)ことができます。エンコード・デコードはこれと同じで「決まったルールで変換する→同じルールで元に戻せる」という仕組みです。

エンコードと暗号化はどう違うの?

よく混同されますが、この2つは目的がまったく異なります。

比較項目 エンコード 暗号化
目的 データを扱いやすい形式に変換する データを第三者に読めない形にして守る
鍵(キー) 不要(ルールさえ知れば誰でも元に戻せる) 必要(正しい鍵がないと元に戻せない)
秘密性 なし(変換ルールは公開されている) あり(鍵を知らないと復号できない)
具体例 URLエンコード・Base64・文字コード変換 AES・RSA・TLS通信
大切なポイント
エンコードは「秘密にする」ものではありません。Base64でエンコードされたデータは、ルールさえ知っていれば誰でも元のデータに戻せます。「Base64でエンコードしたから安全」という考え方は間違いです。データを守りたい場合は暗号化が必要です。

URLエンコード(パーセントエンコーディング)

URLエンコードとは、URLの中に使えない文字や、特別な意味を持つ文字(日本語・スペース・記号等)を「%」と16進数の組み合わせに変換する仕組みです。「パーセントエンコーディング」とも呼ばれます。

なぜURLエンコードが必要なの?
URLでは、文字によって特別な意味を持つものがあります。たとえば「/」は階層の区切り、「?」はクエリ文字列の開始、「&」はパラメータの区切りとして使われます。そのため、これらを単なる文字として扱いたい場合や、日本語・スペースなどをURL内で扱いたい場合には、決められた形式に変換する必要があります。これがURLエンコードです。

よく見るURLエンコードの例

元の文字 URLエンコード後 補足
スペース(半角) %20 または + + は主に検索クエリやフォーム送信の値で使われる
! %21 感嘆符
@ %40 メールアドレス等に含まれる場合
東(漢字) %E6%9D%B1 日本語はUTF-8で変換される
/(スラッシュ) %2F URLの区切り文字と区別するため

URLエンコードとセキュリティ

URLエンコードはWebアプリケーションのセキュリティとも関係があります。

  • 入力値の扱いに注意:URLエンコードされた文字列は、サーバー側でデコードされた後に処理されます。そのため、URLエンコードされているから安全とは判断できません。SQLインジェクション対策には、プリペアドステートメント、プレースホルダ、入力検証などが必要です
  • 攻撃での悪用:攻撃者がURLエンコードを使って「/」や「..」などの危険な文字列を「%2F」や「%2E%2E」に変換して、Webアプリケーションのセキュリティチェックをすり抜けようとするケースがあります。WAF(Webを守るフィルター)はこうしたエンコード後の文字列もチェックします

Base64エンコード

Base64エンコードとは、バイナリデータ(画像・音声・プログラムなど、0と1の羅列)を「A〜Z・a〜z・0〜9・+・/」の64種類の文字だけで表現する変換方式です。

Base64がなぜ必要なの?
昔のメールシステムは「テキスト(文字)しか送れない」仕組みでした。画像や音声などのバイナリデータをそのままメールに入れると文字化けしたり壊れたりしました。そこで「バイナリデータをテキスト(64種類の文字)に変換してから送る」という方法が生まれました。それがBase64エンコードです。今でもメールの添付ファイル・APIでの画像データのやりとり・WebページへのSVG画像の埋め込みなどで使われています。

Base64の変換例

元のテキスト:Hello
Base64エンコード後:SGVsbG8=元のテキスト:こんにちは
Base64エンコード後:44GT44KT44Gr44Gh44Gv末尾の「=」や「==」はBase64の「パディング(桁合わせ)」と呼ばれる記号です。

Base64の特徴

  • データが約1.33倍になる:変換すると元のデータより約3分の1大きくなります
  • すべての環境で安全に扱える文字だけを使う:英数字と記号2つだけなので、さまざまなシステムで問題なく使えます
  • 秘密性はない:Base64は誰でも元に戻せます。秘密にしたいデータは別途暗号化が必要です

Base64とセキュリティ

  • マルウェアの隠蔽:マルウェアのコードや不正なコマンドをBase64でエンコードしてセキュリティツールの検知を回避しようとする手口があります。ウイルス対策ソフトや解析ツールはBase64のパターンを検知してデコードして中身を確認します
  • フィッシングメールのURL隠蔽:フィッシングメールに含まれる悪意あるURLをBase64でエンコードして人間の目から隠す手口があります

文字コード(UTF-8・Shift-JIS等)

文字コードとは、「あ」「A」「1」などの文字をコンピューターが扱える数値(バイトデータ)に対応させたルール表のことです。エンコードの一種です。

主な文字コードの種類

文字コード 特徴 主な用途
UTF-8 世界中のほぼすべての文字を扱える。現在の標準 Webページ・メール・ほぼすべての現代的なシステム
Shift-JIS(SJIS) 日本語に特化した文字コード 古い日本のシステム・Windowsの一部・CSVファイル
EUC-JP 日本語に対応したUnix系の文字コード 古いLinuxサーバー・メールシステム等
ASCII 英数字と基本的な記号のみ(128文字) プログラムのソースコード・英語のテキスト
「文字化け」はエンコードのミスから起きる
「CSVファイルを開いたら日本語が「???」になった」という経験はないでしょうか。これはファイルがShift-JISで保存されているのにUTF-8として開いた(または逆)という「エンコードのすれ違い」が原因です。同じルールで変換・復元しないと正しく読めません。

HTMLエンティティエンコード

HTMLエンティティとは、HTML内で特別な意味を持つ文字(< > & 等)を「&lt;」「&gt;」「&amp;」のような表記に変換する仕組みです。

たとえばHTMLの中に「<script>」とそのまま書くとブラウザがJavaScriptとして実行してしまいますが、「&lt;script&gt;」と変換(エンコード)すれば「文字として表示する」だけになります。これはXSS(クロスサイトスクリプティング)という攻撃を防ぐ基本的な対策のひとつです。

エンコード・デコードを確認するツール

エンコード・デコードを手軽に試せる便利なツールが無料で公開されています。

  • CyberChef(サイバーシェフ):英国情報機関GCHQが公開しているエンコード・デコード・暗号化・解析のオールインワンツール。URLエンコード・Base64・各種変換をブラウザ上で簡単に試せます(https://gchq.github.io/CyberChef/)
  • dencode.com:URLエンコード・Base64・HTMLエンティティ・文字コード変換など多数のエンコード・デコードを一度に試せる日本語対応ツール
  • ブラウザの開発者ツール:ChromeのConsole(コンソール)で「atob(‘SGVsbG8=’)」と入力するとBase64をデコードできます
外部ツール利用時の注意
外部のエンコード・デコードツールに、パスワード、個人情報、社内資料、APIキー、トークンなどの機密情報を貼り付けないように注意してください。便利なツールでも、入力した情報が外部サービスに送信される可能性があります。

被害事例2選

事例①:フィッシングメールやマルウェアでBase64が悪用されるリスク

フィッシングメールやマルウェアでは、PowerShellコマンド、不正なURL、スクリプトなどをBase64でエンコードし、人間の目や単純な検知ルールから隠そうとする手口があります。Base64の文字列自体は無害に見えるため、内容を確認せずに実行すると、マルウェアのダウンロードや不正な通信につながる可能性があります。

過去には、採用担当者を装ったフィッシングメールにより、多数のPCがマルウェアに感染した事例も報じられています。Base64は、このような攻撃で不正なコマンドやURLを目立ちにくくする目的で使われることがあります。

対策としては、不審なメールの添付ファイルやリンクを開かないことに加え、PowerShellの不審な実行、Base64らしき長い文字列、外部通信、マルウェアのダウンロード挙動をEDRやメールセキュリティ製品で監視することが重要です。

事例②:SQLインジェクション攻撃でエンコードが検知回避に使われるリスク

Webアプリケーションへの攻撃では、攻撃者がSQLインジェクションの文字列をURLエンコードし、見た目を変えて送信することがあります。たとえば、記号や制御文字を「%27」「%3B」「%2D%2D」のように変換することで、単純な文字列チェックをすり抜けようとするケースがあります。

サイバーセキュリティ.comでも、SQLインジェクションにより情報漏えいが懸念された事例や、WAF設定ミスにより不正アクセスを防げなかった事例が報じられています。URLエンコードされているから安全というわけではなく、サーバー側でデコードされた後の値まで含めて検証する必要があります。

対策としては、URLエンコードの有無にかかわらず、プリペアドステートメントやプレースホルダを使ってSQLを安全に実行すること、入力値を適切に検証すること、WAFのルールを最新に保つことが重要です。


よくある質問(FAQ)

Q. Base64でエンコードしたら安全ですか?

いいえ。Base64エンコードは「安全にする(秘密にする)」ものではなく、「扱いやすい形式に変換する」ものです。ルールさえ知っていれば誰でも元のデータに戻せます。データを守りたい場合はAESなどの暗号化が必要です。「Base64でエンコードしてあるから大丈夫」という考え方は危険です。

Q. URLエンコードとHTMLエンティティの使い分けは?

使う場所が違います。URLエンコード(%20等)はURLの中で使う変換です。HTMLエンティティ(&lt;等)はHTMLの中で使う変換です。Webアプリケーション開発では「URLにデータを入れるときはURLエンコード」「HTMLにデータを表示するときはHTMLエンティティエンコード」という使い分けが必要で、間違えるとXSSなどの脆弱性につながることがあります。

Q. 文字化けを防ぐにはどうすれば?

ファイルの作成側と読み込み側で同じ文字コードを使うことが基本です。現代的なシステムでは特別な理由がない限り「UTF-8」に統一することを推奨します。CSVファイルをExcelで開いて文字化けする場合は、ExcelのBOM(Byte Order Mark)付きUTF-8での保存・または「データ」タブから「テキストファイルのインポート」で文字コードを指定して開くことで解決できます。

Q. エンコードとシリアライズはどう違いますか?

シリアライズはオブジェクト(プログラム内のデータ構造)を保存・転送できる形式(バイト列・JSON・XML等)に変換することです。エンコードはデータを別の表現形式に変換する広い概念です。シリアライズはエンコードの一種と考えることもできますが、「オブジェクトの構造を保ちながら変換する」という目的が特定されています。

Q. ハッシュ化はエンコードの一種ですか?

違います。エンコードは「元に戻せる(デコードできる)」変換ですが、ハッシュ化は「元に戻せない(一方向の変換)」という根本的な違いがあります。MD5やSHA-256などのハッシュ関数はパスワードの保存や改ざん検知に使われますが、エンコードとは別の概念です。

まとめ

エンコード(Encode)とはデータをある決まったルールで別の形式に変換すること、デコード(Decode)とはその逆で元の形式に戻すことです。代表的なものはURLエンコード(URLに使えない文字を%XX形式に変換)・Base64(バイナリデータを英数字に変換)・文字コード(文字を数値に対応させるルール)・HTMLエンティティ(HTMLの特殊文字を安全な表記に変換)などがあります。

エンコードと暗号化は混同されがちですが、エンコードは「扱いやすくする変換(ルールを知れば誰でも戻せる)」で秘密性はありません。暗号化は「秘密にする変換(鍵がないと戻せない)」です。「Base64でエンコードしたから安全」は誤りです。

セキュリティの観点では、攻撃者がBase64でマルウェアのコードを隠したり・URLエンコードでWAFのフィルターをすり抜けようとする手口があります。最新のセキュリティツールはエンコードを自動的にデコードして内容を確認しますが、古いツールや設定が不十分な場合には回避されるリスクがあります。

SNSでもご購読できます。