Base64 アルゴリズムは、バイナリ データを ASCII 文字に変換するエンコード方式で、送信中にデータが変更されたり破損したりすることがなく、データの本当の内容も隠すことができます。 PHP では、組み込み関数を使用するか、コードを手動で記述して、Base64 エンコードとデコードを実装できます。
PHP には、簡単に実行できる 2 つの組み込み関数base64_encode() とbase64_decode() が用意されています。 Base64 コーデック。使用方法は次のとおりです。
Base64 エンコード:
$encoded_data = base64_encode($data);
このうち、$data はエンコードが必要なバイナリ データ、$encoded_data はエンコードされた文字列です。他のエンコード方法 (URL エンコードなど) とは異なり、Base64 でエンコードされた文字列には、URL で送信するときにエスケープする必要がある「/」や「 " などの特殊文字が含まれる場合があります。
Base64 デコード:
$decoded_data = base64_decode($encoded_data);
このうち、$encoded_data はエンコードされた文字列、$decoded_data はデコードされたバイナリ データです。
この方法は最も単純な実装ですが、大きなバイナリ データ (画像ファイルなど) を処理する場合、大量のメモリを占有し、パフォーマンスの問題が発生します。
大きなバイナリ データを処理するために、Base64 アルゴリズムの実装を手動で作成できます。以下は、PHP で Base64 エンコードとデコードを手動で実装するコードです。
// Base64编码 function base64_encode_php($data) { $base64_map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; $base64_data = ""; $data_len = strlen($data); for ($i = 0; $i < $data_len; $i += 3) { $chunk = ord(substr($data, $i, 3)); $base64_data .= $base64_map[($chunk >> 2) & 0x3F]; $base64_data .= $base64_map[(($chunk << 4) & 0x30) | ((ord(substr($data, $i + 1, 1)) >> 4) & 0x0F)]; $base64_data .= (($i + 2) < $data_len) ? $base64_map[(ord(substr($data, $i + 1, 1)) << 2) & 0x3C | (ord(substr($data, $i + 2, 1)) >> 6) & 0x03] : "="; $base64_data .= (($i + 2) < $data_len) ? $base64_map[ord(substr($data, $i + 2, 1)) & 0x3F] : "="; } return $base64_data; } // Base64解码 function base64_decode_php($data) { $base64_map = array( 'A' => 0, 'B' => 1, 'C' => 2, 'D' => 3, 'E' => 4, 'F' => 5, 'G' => 6, 'H' => 7, 'I' => 8, 'J' => 9, 'K' => 10, 'L' => 11, 'M' => 12, 'N' => 13, 'O' => 14, 'P' => 15, 'Q' => 16, 'R' => 17, 'S' => 18, 'T' => 19, 'U' => 20, 'V' => 21, 'W' => 22, 'X' => 23, 'Y' => 24, 'Z' => 25, 'a' => 26, 'b' => 27, 'c' => 28, 'd' => 29, 'e' => 30, 'f' => 31, 'g' => 32, 'h' => 33, 'i' => 34, 'j' => 35, 'k' => 36, 'l' => 37, 'm' => 38, 'n' => 39, 'o' => 40, 'p' => 41, 'q' => 42, 'r' => 43, 's' => 44, 't' => 45, 'u' => 46, 'v' => 47, 'w' => 48, 'x' => 49, 'y' => 50, 'z' => 51, '0' => 52, '1' => 53, '2' => 54, '3' => 55, '4' => 56, '5' => 57, '6' => 58, '7' => 59, '8' => 60, '9' => 61, '+' => 62, '/' => 63 ); $data_len = strlen($data); $padding_count = substr_count($data, "="); $binary_data = ""; $byte_count = 0; for ($i = 0; $i < $data_len; $i++) { $char = $data[$i]; if (isset($base64_map[$char])) { $byte_count++; $binary_data .= str_pad(decbin($base64_map[$char]), 6, "0", STR_PAD_LEFT); if ($byte_count == 4) { $byte_count = 0; $binary_data = substr($binary_data, 0, strlen($binary_data) - 8); } } } return substr($binary_data, 0, strlen($binary_data) - $padding_count * 8); }
このコードは主に、Base64 エンコードと Base64 デコードの 2 つの部分に分かれています。
Base64 エンコード部分では、最初に Base64 マッピング テーブル $base64_map を定義します。これは、6 ビット バイナリ データを対応する Base64 文字に変換するために使用されます。そして、入力されたバイナリデータを3バイトずつ取り出して処理します。データの 3 バイト ブロックごとに、4 つの 6 ビット ブロックに分割します。現在処理されているバイト数が 3 バイト未満の場合は、「=」文字を補足する必要があります。
Base64 デコード部分では、まず Base64 マッピング テーブル $base64_map を定義します。今回は、各 Base64 文字を 6 ビット バイナリ データに変換するために使用されます。入力 Base64 文字列の場合は、バイナリ データに変換してから、8 ビットのグループの ASCII 文字に変換します。
この方法は比較的複雑ですが、大量のデータをチャンクで処理できるため、パフォーマンスを大幅に向上させることができます。
概要
PHP 組み込み関数を使用する場合でも、手動で Base64 アルゴリズムを作成する場合でも、Base64 のエンコードおよびデコード操作を簡単に実行できます。小さなバイナリ データの場合は、組み込み関数を使用するだけで十分ですが、大きなバイナリ データを処理する場合は、手書きアルゴリズムを使用するとパフォーマンスを向上させることができます。
以上がPHPでBase64エンコードとデコードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。