Какой самый питонический способ доступа к библиотекам C - например, OpenSSL? - PullRequest
3 голосов
/ 08 января 2009

Мне нужен доступ к криптографическим функциям OpenSSL для кодирования данных Blowfish в потоках CBC. Я гуглил и нашел несколько библиотек Blowfish (написанных от руки) и некоторые обертки OpenSSL (ни одна из которых не кажется полной).

В конце мне нужно получить доступ к определенным функциям OpenSSL, таким как полная библиотека blowfish.h команд . Какой питон / правильный способ доступа к ним? Использование чего-то вроде SWIG для разрешения привязок Python / C, или есть лучший способ?

Спасибо!

Ответы [ 6 ]

5 голосов
/ 06 февраля 2009

Я был счастлив с M2Crypto (оболочкой OpenSSL) для blowfish.

import M2Crypto
from M2Crypto import EVP
import base64
import struct

key = '0' * 16 # security FTW
iv = '' # initialization vector FTW
dummy_block =  ' ' * 8

encrypt = EVP.Cipher('bf_cbc', key, iv, M2Crypto.encrypt)
decrypt = EVP.Cipher('bf_cbc', key, iv, M2Crypto.decrypt)

binary = struct.pack(">Q", 42)
ciphertext = encrypt.update(binary)

decrypt.update(ciphertext) # output is delayed by one block
i = struct.unpack(">Q", decrypt.update(dummy_block))

print i
5 голосов
/ 08 января 2009

Существует множество способов взаимодействия с C (и C ++) в Python. ctypes довольно хорош для быстрых небольших расширений, но имеет привычку превращать ошибки во время компиляции в ошибки времени выполнения Если вы хотите написать собственное расширение, SIP очень хорош. SWIG является очень общим, но имеет большее число последователей. Конечно, первое, что вы должны сделать, это посмотреть, действительно ли вам нужен интерфейс. Вы смотрели на PyCrypto?

5 голосов
/ 08 января 2009

ctypes - это место для начала. Он позволяет вам вызывать библиотеки DLL, используя объявленные C-типы и т. Д. Я не знаю, существуют ли ограничения, которые не позволят вам делать все, что вам нужно, но он очень эффективен и включен в стандартную библиотеку.

0 голосов
/ 07 февраля 2009

Я бы также порекомендовал M2Crypto , но если пример кода от joeforker выглядит немного странно, вам, возможно, будет проще разобраться в модульных тестах шифрования M2Crypto, которые включают Blowfish. Проверьте CipherTestCase в test_evp.py .

0 голосов
/ 09 января 2009

У меня также был хороший успех с Cython.

0 голосов
/ 08 января 2009

SWIG в значительной степени канонический метод. Хорошо работает тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...