Base 64暗号化
5112 ワード
げんり
これは比較的広範な暗号化方式であるが、それが比較的広範であるため古典的なbase 64規則を解読されやすい:まず元の列を操作する:3文字を一緒に置く(3*8=24ビット)、この24ビットビットを4グループに分け、各グループ6ビット、各グループの前に2つの0を補う
例えば、元の列:01001000 01001111 01001010操作後:000100100100000100 0011101 00001010総じて長さが1/3増加し、各文字が6ビットしかないので0ではない可能性があるため、実際には26=64種類の操作結果文字があるのでbase 64と呼ばれます
この64種類を表示するには、0-25対応A-Z 25-51対応a-z 52-61対応0-9 62対応+63対応/
末尾で、3文字(24ビット)が足りない場合、複数の全0バイト、例えば単一アルファベット
たとえば、Aのasciiは65なので、1つのA変換の場合:01000001 00000000変換:00010000000 00000000変換:00010000000 00000000変換最後の2つが
python 3の実装
pythonの標準ライブラリはbase 64を提供し、
2つ目と1つ目の違いは、base 64では
python 3ではstrのデフォルト符号化はunicodeであり、bytesに直接転送することはできないため、暗号化前に先にトランスコードする必要がある(そうでなければ
これでutf-8のトランスコードはstrをbytesに変換する
出力の結果はb’暗号文’であり,結果がbytes型であることを示し,strに強制的に変換してbを取り除くことができる
復号化プロセスはdecodeです
暗号化との違いはstrタイプを直接入力できるため、暗号文はbytesに変換する必要はありませんが、戻り値はbytesです.
復号処理
これは比較的広範な暗号化方式であるが、それが比較的広範であるため古典的なbase 64規則を解読されやすい:まず元の列を操作する:3文字を一緒に置く(3*8=24ビット)、この24ビットビットを4グループに分け、各グループ6ビット、各グループの前に2つの0を補う
例えば、元の列:01001000 01001111 01001010操作後:000100100100000100 0011101 00001010総じて長さが1/3増加し、各文字が6ビットしかないので0ではない可能性があるため、実際には26=64種類の操作結果文字があるのでbase 64と呼ばれます
この64種類を表示するには、0-25対応A-Z 25-51対応a-z 52-61対応0-9 62対応+63対応/
末尾で、3文字(24ビット)が足りない場合、複数の全0バイト、例えば単一アルファベット
A
を補い、8ビットのみを補い、Aのascii、8個の0、8個の0パケットの後にある可能性のある操作結果は全0であり、このような対応=
はbase 64符号化の特徴であり、最後に補0が1つまたは2つの=
を生成することがあるたとえば、Aのasciiは65なので、1つのA変換の場合:01000001 00000000変換:00010000000 00000000変換:00010000000 00000000変換最後の2つが
=
であることがわかりましたpython 3の実装
pythonの標準ライブラリはbase 64を提供し、
import base64
で比較的よく使われるbase64.b64encode([bytes])
base64.urlsafe_b64encode([bytes])
2つ目と1つ目の違いは、base 64では
/
、+
の2つのurlでエスケープされる文字が発生するため、url使用では/
、+
を下線と短棒に変換し、受信者は逆の操作を行い、urlで安全に伝送することができるpython 3ではstrのデフォルト符号化はunicodeであり、bytesに直接転送することはできないため、暗号化前に先にトランスコードする必要がある(そうでなければ
a bytes-like object is required, not 'str'
エラー)import base64
a=input()
print(base64.b64encode(a.encode('utf-8')))# bytes
これでutf-8のトランスコードはstrをbytesに変換する
出力の結果はb’暗号文’であり,結果がbytes型であることを示し,strに強制的に変換してbを取り除くことができる
import base64
a=input()
b=base64.b64encode(a.encode('utf-8'))#b bytes
c=str(b,"utf-8")# str
print(c)
復号化プロセスはdecodeです
base64.b64decode([bytes, bytearray, memoryview, str])
base64.urlsafe_b64decode([bytes, bytearray, memoryview, str])
暗号化との違いはstrタイプを直接入力できるため、暗号文はbytesに変換する必要はありませんが、戻り値はbytesです.
import base64
a=input()
print(base64.b64decode(a))
復号処理