データURIのデコードとコンテンツ抽出
JavaScript、コマンドラインツール、ブラウザ開発ツールを使用してデータURIを元のコンテンツにデコードする方法を学ぶ。MIMEタイプとバイナリデータの抽出。
Decoding
詳細な説明
データURIのデコード
データURIから元のコンテンツを抽出することは、デバッグ、監査、リバースエンジニアリングに有用です。プロセスはURI形式の解析、エンコーディングの識別、ペイロードのデコードを含みます。
データURI構造
data:[<mediatype>][;base64],<data>
これを解析する正規表現:
const regex = /^data:([^;,]+)?(;base64)?,(.*)$/;
const match = dataUri.match(regex);
// match[1] = MIMEタイプ
// match[2] = ";base64" または undefined
// match[3] = エンコードされたデータ
JavaScriptデコード
function decodeDataUri(dataUri) {
const match = dataUri.match(/^data:([^;,]+)?(;base64)?,(.*)$/);
if (!match) throw new Error('Invalid data URI');
const mimeType = match[1] || 'text/plain';
const isBase64 = !!match[2];
const data = match[3];
if (isBase64) {
const binary = atob(data);
const bytes = Uint8Array.from(binary, c => c.charCodeAt(0));
return { mimeType, bytes };
} else {
return { mimeType, text: decodeURIComponent(data) };
}
}
コマンドラインデコード
base64コマンド使用(macOS/Linux):
echo "iVBORw0KGgo..." | base64 --decode > output.png
一般的なデコードエラー
- 無効なBase64: データ部分が有効なBase64文字のみを含むことを確認
- 切り詰められたデータ: データURIが途中で切れている場合、デコードにより破損した出力が生成される
- 誤ったエンコーディング推定: パーセントエンコードされたデータをBase64デコードしようとする、またはその逆
ユースケース
ユーザーアバター画像をデータURIとしてデータベースに保存するWebアプリケーションをデバッグしており、正しく保存されたことを確認するために画像を抽出して検査する必要がある場合。