Base64エンコーディングは、プログラム開発でよく使用されるエンコーディング方法です。これは、64 個の印刷可能な文字を使用してバイナリ データを表現することに基づいた表現方法です。通常、バイナリ データを保存および送信するためのエンコード方法として使用されます。これは、MIME (MultiPurpose Internet Mail Extensions、主に電子メール標準として使用される) の印刷可能文字で表されるバイナリ データの一般的なエンコード方法でもあります。実際には、印刷可能な文字を使用してコンテンツを送信する方法を定義しているだけであり、新しい文字セットを作成するわけではありません。場合によっては、変換の概念を学んだ後、実際のニーズに基づいて独自のインターフェイス定義コーディング方法を実際に構築できることがあります。さて、変換のアイデアを見てみましょう!
Base64実装の変換原理
64 個の印刷可能な文字を使用してすべてのバイナリ データを表す方法です。 2 の 6 乗は 64 に等しいため、6 ビットごとを、特定の印刷可能文字に対応する単位として使用できます。 3 バイトは 24 ビットであり、4 つの Base64 ユニットに対応できることがわかっています。つまり、3 バイトは 4 つの Base64 印刷可能文字で表す必要があります。 Base64 で印刷可能な文字には、文字 A ~ Z、a ~ z、数字 0 ~ 9 が含まれるため、合計 62 文字になります。また、通常、2 つの印刷可能な記号はシステムによって異なります。ただし、よく参照される Base64 の他の 2 文字は「+/」です。この 64 文字の対応表は次のとおりです。
数字 文字 数字 文字 数字 文字 数字 文字 0 あ 16 Q 32 g 48 w 1 B 17 R 33 え 49 × 2 C 18 S 34 私 50 よ 3 D 19 た 35 j 51 z 4 え 20 う 36 k 52 0 5 F 21 V 37 l 53 1 6 G 22 わ 38 ん 54 2 7 ひ 23 X 39 ん 55 3 8 私 24 よ 40 お 56 4 9 J 25 Z 41 p 57 5 10 K 26 あ 42 q 58 6 11 L 27 b 43 r 59 7 12 ま 28 c 44 す 60 8 13 ん 29 d 45 ち 61 9 14 お 30 え 46 う 62 + 15 P 31 f 47 v 63 /
変換中、3 バイトのデータが 24 ビット バッファに次々と入れられ、最初に来たバイトが上位ビットを占めます。データが 3 バイト未満の場合、バッファ内の残りのビットは 0 で埋められます。その後、毎回 6 ビットが取り出され、その値に応じて <br>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
内の文字がエンコードされた出力として選択されます。すべての入力データが変換されるまで続行します。
最後に入力データが 2 つ残っている場合は、エンコード結果の後に 1 つ「=」を追加します。最後に入力データが 1 つ残っている場合は、エンコード結果の後に 2 つ「=」を追加します。データ復元の正確性を確保するため、何も使用しないでください。
エンコードされたデータは元のデータよりわずかに長く、元のデータの 4/3 です。文字の種類に関係なく、すべての文字がエンコードされるため、Quoted-printable エンコードとは異なり、一部の印刷可能文字は保持されます。したがって、Quoted-printable エンコーディングほど読みやすくはありません。
テキスト | M | あ | ん | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ASCII エンコード | 77 | 97 | 110 | |||||||||||||||||||||
バイナリビット | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
インデックス | 19 | 22 | 5 | 46 | ||||||||||||||||||||
Base64エンコーディング | た | W | F | う |
M の ASCII コードは 77、最初の 6 桁は 19 に対応し、対応する Base64 文字は T などとなります。他の文字コードも自動変換可能!ちょうど 3 バイトではない別の状況を見てみましょう。
テキスト(1バイト) | A | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
バイナリビット | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | ||||||||||||||||
2進数(0の補数) | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | ||||||||||||
Base64エンコーディング | Q | Q | = | = | ||||||||||||||||||||
テキスト(2バイト) | B | C | ||||||||||||||||||||||
バイナリビット | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | × | × | × | × | × | × | ||
2進数(0の補数) | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | × | × | × | × | × | × |
Base64エンコーディング | Q | k | M | = |
Base64変換コードの実装
方法がわかったので、簡単な変換を自分で書きたい場合、それは非常に簡単だと思われます。以下に、変換を行う php コードを書き留めます。
<span><?php </span></span>
/**
*base64编码方法、本方法只是做base64转换过程代码举例说明,通过该例子可以任意改造不同语言版
*@author 程默
*@copyright http://blog.chacuo.net
*@param $src 原字符串
*@return string base64字符串*
*/
function
c_base64_encode(
$src
)
{
static
$base
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
;
////将原始的3个字节转换为4个字节
$slen
=
strlen
(
$src
);
$smod
= (
$slen
%3);
<code>$snum
=
floor
(
$slen
/3);
$desc
=
array
();
for
(
$i
=0;
$i
<code>$snum
;
$i
++)
コード>
{
////读取3个字节
$_arr
=
array_map
(
'ord'
,
str_split
(
substr
(
$src
,
$i
*3,3)));
///计算每一个base64值
$_dec0
=
$_arr
[0]>>2;
$_dec1
= ((
$_arr
[0]&3)<code>$_arr
[1]>>4);
$_dec2
= ((
$_arr
[1]&0xF)<code>$_arr
[2]>>6);
$_dec3
=
$_arr
[2]&63;
$desc
=
array_merge
(
$desc
,
array
(
$base
[
$_dec0
],
$base
[
$_dec1
],
$base
[
$_dec2
],
$base
[
$_dec3
]));
}
if
(
$smod
==0)
return
implode(
''
,
$desc
);
///计算非3倍数字节
$_arr
=
array_map
(
'ord'
,
str_split
(
substr
(
$src
,
<code>$snum*3,3)));
$_dec0
=
$_arr
[0]>>2;
///只有一个字节
if
(!isset(
$_arr
[1]))
コード>
{
$_dec1
= ((
$_arr
[0]&3)
$_dec2
=
$_dec3
=
"="
;
}
else
コード>
{
///2个字节
$_dec1
= ((
$_arr
[0]&3)<code>$_arr
[1]>>4);
$_dec2
=
$base
[(
$_arr
[1]&7)
$_dec3
=
"="
;
}
$desc
=
array_merge
(
$desc
,
array
(
$base
[
$_dec0
],
$base
[
$_dec1
],
$_dec2
,
$_dec3
));
return
implode(
''
,
$desc
);
}
リーリー
さて、この例を通じて、base64 エンコーディングの変換原理とアルゴリズムについてある程度理解できたと思います。変換プロセスは非常に簡単で、マッピング テーブルを作成し、元のテーブルに対してシフト操作を行うだけです。この例を通じて、独自の Base32 エンコーディングを作成できますか?友達とコミュニケーションを取ることを歓迎します!
著者: Cheng Mo のブログ QQ: 8292669
元の URL: http://blog.chacuo.net/719.html
購読してお待ちください: http://blog.chacuo.net/feed
この記事の著作権は以下に属します著者への転載は歓迎しますが、必ず原文へのリンクを追加してください。

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

XSS攻撃を防ぎ、リソースのロードを制限し、ウェブサイトのセキュリティを改善できるため、CSPは重要です。 1.CSPはHTTP応答ヘッダーの一部であり、厳格なポリシーを通じて悪意のある行動を制限します。 2。基本的な使用法は、同じ起源からのロードリソースのみを許可することです。 3.高度な使用法は、特定のドメイン名がスクリプトやスタイルをロードできるようにするなど、より微調整された戦略を設定できます。 4。CSPポリシーをデバッグおよび最適化するには、コンテンツセキュリティポリシーレポートのみのヘッダーを使用します。

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

HTTPSは、HTTPに基づいてセキュリティレイヤーを追加するプロトコルであり、主に暗号化されたデータを介してユーザーのプライバシーとデータセキュリティを保護します。その作業原則には、TLSの握手、証明書の確認、暗号化された通信が含まれます。 HTTPSを実装する場合、証明書管理、パフォーマンスへの影響、および混合コンテンツの問題に注意を払う必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック



