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を補い、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))

復号処理