BlankTar

about | blog | works | photo

暗号っていいよね。なんかこう、楽しい。
というわけで、pythonで試してみました。
といっても、残念ながら標準ライブラリにはそれっぽいのがない。
hmacとかsslとかはあるんだけどねー。
AESくらいは標準ライブラリに入れといて欲しいよね・・・。ま、仕方がない。
仕方がないので、今回使うのはpycryptoっていうライブラリを使わして頂きます。

インストール

gentooのportageにパッケージがあったので有難く利用。
# 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
< scheme(gauche)でTCP通信してみる 次世代starの候補版を公開したよ >