pythonで暗号化と複合

2020年12月21日

pythonで暗号化と複合

今回は「pycripto」を使って暗号化をしてみたいと思います。
色々な暗号規格があるそうですが「AES」と言うものは「Advanced(高度な) Encryption(暗号化)Standard(標準)」の略らしいです。これを使ってみます。

参考:
  AESとは
  暗号化ライブラリ PYCRYPTO
  「暗号化」の反対は「復号化」じゃなくて「復号」なんだよ

インストール

まずは「pycrypto」と言うライブラリをインストールしましょう。


pip3 install pycrypto

プログラム

secret_keyの文字列を使って平文を暗号にしています。
イメージが湧くように英語をまとめておきます。
crypto : 暗号
encryt : 暗号化する
decrypt: 解読する
cipher : 暗号


from Crypto.Cipher import AES

secret_key = 'this is secret:)'
message    = 'Awesome python!!'

crypto = AES.new(secret_key)

cipher_data = crypto.encrypt(message)
print(cipher_data)

original_message = crypto.decrypt(cipher_data)
print(original_message)

結果は下の通りです。


b'\x9b\xe6p\xdc-\x7fBgDR\xc0\xa1aTf\xc0'
b'Awesome python!!'

【以下注意点抜粋】
secret_keyは、半角16,24,32のうちのいずれかの長さにしなくてはなりません。また、messageは半角16文字の倍数の長さでなくてはなりません。暗号化したいメッセージに空白を後ろに足すなどして長さを16の倍数に合わせましょう。 それぞれのルールが合わなかった場合、次のようなエラーが表示されます。


#secret_keyの長さについて
ValueError: AES key must be either 16, 24, or 32 bytes long
#messegeの長さについて
ValueError: Input strings must be a multiple of 16 in length

下の記事が詳しくまとめて下さっています。
プログラマの暗号化入門

2020年12月21日