Domanda

Devo accedere alle funzioni di crittografia di OpenSSL per codificare i dati Blowfish in flussi CBC. Ho cercato su Google e ho trovato alcune librerie Blowfish (scritte a mano) e alcuni wrapper OpenSSL (nessuno sembra completo.)

Alla fine, ho bisogno di accedere ad alcune funzioni OpenSSL, come l'intera libreria blowfish.h di comandi . Qual è il modo giusto / pitone di accedervi? Usando qualcosa come SWIG per consentire i collegamenti Python / C, o c'è un modo migliore?

Grazie!

È stato utile?

Soluzione

Esistono molti modi per interfacciarsi con C (e C ++) in Python. ctypes è piuttosto carino per le piccole estensioni veloci, ma ha l'abitudine di trasformare gli errori di tempo di compilazione in segfault di runtime. Se stai cercando di scrivere la tua estensione, SIP è molto carino. SWIG è molto generale, ma ha un seguito più ampio. Naturalmente, la prima cosa che dovresti fare è vedere se hai davvero bisogno di interfacciarti. Hai visto PyCrypto?

Altri suggerimenti

ctypes è il punto di partenza. Ti permette di chiamare in DLL, usando i tipi dichiarati in C, ecc. Non so se ci sono limitazioni che ti impediranno di fare tutto il necessario, ma è molto capace ed è incluso nella libreria standard.

Sono stato contento di M2Crypto (un wrapper OpenSSL) per il pesce palla.

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

SWIG è praticamente il metodo canonico. Funziona bene anche.

Ho avuto un buon successo anche con Cython.

Consiglierei M2Crypto , ma se l'esempio di codice di joeforker sembra un po 'strano, tu potrebbe essere più facile comprendere i test dell'unità di cifratura M2Crypto, che includono Blowfish. Dai un'occhiata a CipherTestCase in test_evp.py .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top