2012/04/17

Шифрование AES с помощью pycrypto

Pycrypto - весьма удобный модуль, в котором реализованы различные схемы шифрования. Вот простой пример, как можно шифровать и расшифровывать данные с помощью симметричного AES:
from Crypto.Cipher import AES
import base64
import os

# размер блока шифрования
BLOCK_SIZE = 32

# символ, использующийся для дополнения шифруемых данных
# до размера, кратного 32 байтам
PADDING = '{'

# функция дополнения
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING

# функции шифрования и расшифрования
# результат дополнительно обертывается в base64
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)

# генерируем ключ
secret = os.urandom(BLOCK_SIZE)

# создаем объект
cipher = AES.new(secret)

# шифруем строку
encoded = EncodeAES(cipher, 'password')
print 'Encrypted string:', encoded

# расшифровываем строку
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string:', decoded
Как видно, все достаточно просто, а главное полезно. Таким образом можно шифровать трафик, конфиги с критичной инфой или что-то ещё. При этом конечно необходимо как-то защитить сам ключ, например, скомпилировав скрипт в бинарник и навесив на него всяческих коварных крипторов.

1 comment: