ホームページ  >  記事  >  バックエンド開発  >  PythonでのBase64暗号化・復号化の操作方法とバージョンの違い

PythonでのBase64暗号化・復号化の操作方法とバージョンの違い

巴扎黑
巴扎黑オリジナル
2017-08-16 13:45:391846ブラウズ

今日は、base64暗号化関数の使い方とPython2とPython3の違いを見てみましょう。

1.base64

Base64 は、64 個の印刷可能な文字に基づくバイナリ データの表現方法です。 2 の 6 乗は 64 に等しいため、6 ビットごとが 1 つの単位となり、印刷可能な文字に対応します。 3 バイトは 24 ビットで、4 Base64 ユニットに対応します。つまり、3 バイトは 4 つの印刷可能文字で表す必要があります。電子メールの転送エンコードとして使用できます。 Base64 で印刷可能な文字には、文字 A ~ Z、a ~ z、および数字 0 ~ 9 が含まれるため、他の 2 つの印刷可能な文字はシステムによって異なります。エンコードされたデータは元のデータよりわずかに長く、元の長さの 4/3 になります。

Base64 は、テキスト データが通常処理される状況で、バイナリ データ (または印刷不可能な文字列) を表現、送信、保存するためによく使用されます。 MIME 電子メール、MIME 経由の電子メール、XML での複雑なデータの保存を含みます。

電子メールでの使用:

MIME 形式の電子メールでは、base64 を使用してバイナリ バイト シーケンス データを ASCII 文字シーケンスで構成されるテキストにエンコードできます。使用する場合は転送エンコード方式にbase64を指定してください。使用される文字は、大文字と小文字が 26 文字、数字が 10 文字、プラス記号「+」、スラッシュ「/」の合計 64 文字で、接尾語として等号「=」が使用されます。

URL での使用:

標準 Base64 は、URL での直接送信には適していません。これは、URL エンコーダーが標準 Base64 の「/」と「+」文字を「%XX」形式などに変更するためです。 「%」記号は、ANSI SQL ではワイルドカード文字として使用されているため、データベースに保存するときに変換する必要があります。

この問題を解決するには、URL の改良された Base64 エンコーディングを使用できます。これは、末尾の「=」記号を埋めず、標準 Base64 の「+」と「/」をそれぞれ「*」と「」に変更します。 -」により、URL のエンコード、デコード、およびデータベース保存時の変換の必要性がなくなり、その過程でエンコードされた情報の長さの増加が回避され、データベースやフォームなどのオブジェクト識別子の形式が統一されます。

正規表現では「+」と「*」が特別な意味を持っているため、「+」と「/」を「!」と「-」に変更する、改良された Base64 の正規表現もあります。

2. Python での使用

Python2 と Python3 は、base64 処理で異なります。Python3 で渡されるパラメーターは Unicode 文字列にすることができないため、変換する必要があります

Python2:

Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> str = 'pythontab.com'
>>> base64.b64encode(str)
'cHl0aG9udGFiLmNvbQ=='
>>> base64.b64decode('cHl0aG9udGFiLmNvbQ==')
'pythontab.com'
>>>

Python3:

Python 3.5.2 (default, Aug 24 2016, 16:48:29) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> str = 'pythontab.com'
>>> bytesStr = str.encode(encoding='utf-8')
>>> bytesStr.decode()
'pythontab.com'
>>> b64str = base64.b64encode(bytesStr)
>>> b64str
b'cHl0aG9udGFiLmNvbQ=='
>>> base64.b64decode(b64str)
b'pythontab.com'
>>>

まず、Python の文字列の内部表現は Unicode エンコードであることを理解する必要があります

したがって、エンコード変換を行うときは、通常、中間エンコードとして Unicode を使用する必要があります。つまり、最初に文字列をデコードする必要があります。他のエンコーディング (デコード) を Unicode に変換し、次に Unicode から別のエンコーディングにエンコード (エンコード) します。

decode の機能は、他のエンコードされた文字列を Unicode エンコードに変換することです。

たとえば、str1.decode('gb2312') は、gb2312 でエンコードされた文字列を Unicode エンコードに変換することを意味します。

encode の機能は、Unicode エンコードを他のエンコードされた文字列 (str2.encode('gb2312') など) に変換することです。これは、Unicode エンコードされた文字列を gb2312 エンコードに変換することを意味します。

3. その他のメソッド

base64.b64encode(s[, altchars])

base64.b64decode(s[, altchars])

altchars は、+ と / の 1 つまたは 2 つを置換するために使用されます。文字列の。

base64.urlsafe_b64encode(s)

base64.urlsafe_b64decode(s)

このメソッドでは、+ の代わりに - が使用され、/ の代わりに _ が使用されます。これにより、エンコードされた文字列に配置されたときに正常にアクセスできることが保証されます。 URL

base64.b32encode(s)

base64.b32decode(s[, casefold[, map01]])

base64.b16encode(s)

base64.b16decode(s[, casefold])

以上がPythonでのBase64暗号化・復号化の操作方法とバージョンの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。