pythonのCryptoでAES暗号を使ってみた
暗号っていいよね。なんかこう、楽しい。 というわけで、pythonで試してみました。
といっても、残念ながら標準ライブラリにはそれっぽいのがない。 hmacとかsslとかはあるんだけどねー。 AESくらいは標準ライブラリに入れといて欲しいよね・・・。ま、仕方がない。 仕方がないので、今回使うのはpycryptoっていうライブラリを使わして頂きます。
インストール
gentooのportageにパッケージがあったので有難く利用。
$ sudo emerge pycrypto
python2.xでもpython3.xでもCryptoって名前のパッケージになります。 小文字じゃないんだね、頭。
gentoo以外を使ってる方はpypiにあるpycryptoのページあたりからどうぞ。
使ってみる
早速AESで遊んでみます。
1つ注意しなきゃいけないのは、AESはブロック暗号だということ。 つまり、鍵長は16バイト、24バイト、32バイトのうちのどれかじゃないといけないし、データも16バイトの倍数じゃなきゃいけない。 めんどくさいけど、まあその分高速・・・なんじゃない? 多分。
from Crypto.Cipher import AES
key = 'this is a key123' # 鍵。数字とか入れて文字数を稼がなきゃいけない。
message = 'this is message!' # 暗号化するデータ。これも16バイトの倍数じゃなきゃいけない。
print 'original:', message
cipher = AES.new(key) # これで暗号化/復号するためのモノを作成。
data = cipher.encrypt(message) # 戻り値は暗号化されたデータ。
print 'cipher:', repr(data) # バイナリなのでそのままprintせずにreprに通してます。
print 'decode:', cipher.decrypt(data) # こうすると復号されたデータが返ってくる。
以上。結構簡単な感じ。
ただ厄介なのは、
import Crypto
obj = Crypto.Cipher.AES.new(key)
みたいな使い方ができないっぽい。 ディレクトリで分けてるみたいね。
必ず
import Crypto.Cipher.AES
とするか、
from Crypto.Cipher import AES
としてください。
参考: PyCryptoで暗号化する - Pythonメモ pycrypto - Python Package Index