Codice di Cryptaggio per immagini in Visual C++

venerdì 04 luglio 2008 - 09.39

Tabris Profilo | Newbie

Salve a tutti,
spero che qualcuno di voi possa aiutarmi in questo mio problema.

Da premettere che utilizzo Microsoft Visual Studio 2005 e supporto il Framework 2.0
Sto programmando in Visual C++ e dovrei risucire a cryptare e decryptare una immagine ma, per quanto provato e riprovato, non riesco a trovare nulla di performante.

Non so se gli elementi che vi ho dato possano essere di reale aiuto, ma confido in un vostro supporto.

Buona giornata.

aiedail92 Profilo | Expert

Ciao

Per Criptare\Decriptare un'immagine intendi agire sui pixel dell'immagine in modo tale da renderla "indecifrabile" oppure modificare un file su disco?

Luca

Tabris Profilo | Newbie

Vorrei cambiare i pixel dell'immagine,e poi vorrei decryptarlo tramite una opportuna chiave.
Scusa, forse avrei dovuto specificarlo meglio prima.

aiedail92 Profilo | Expert

Cercando un po' qui e là, credo di aver trovato un metodo che dovrebbe essere molto sicuro e anche abbastanza performante.

Appoggiandoti sul Framework, e in particolare sul namespace System::Security::Cryptography, puoi usare una qualsiasi delle classi ad algoritmo simmetrico, ad esempio la Rijndael. Quello che fai è costruire un array di byte che identifica tutti i pixel dell'immagine, quindi con la classe Rijndael crittografi l'array, e lo converti nei pixel della nuova immagine. Successivamente, per decodificare la picture, usi il procedimento inverso: dai pixel dell'immagine crittografata ottieni l'array crittografato che decritti con il metodo CreateDecryptor()->TransformFinalBlock, ottenendo di nuovo l'array in chiaro.

Se hai problemi nell'implementazione chiedi pure, sono a disposizione

P.S: Qui c'è un articolo su come utilizzare la classe Rijndael:

http://www.dotnethell.it/articles/RijndaelAlgorithm.aspx

Luca

Tabris Profilo | Newbie

Scusa per l'enorme ritardo con cui scrivo.

In realtà avevo già trovato quel post con relativo esempio, ed infatti mi sto basando proprio su quel pezzo di codice.
In tutta onestà ho difficoltà nella creazione corretta della variabile output nel metodo Encode().
Non riesce a visualizzarla, o per meglio dire non riesco a inizializzarla correttamente, e non so come fare.
Ho provato anche a dichiararla variabile di classe, ma sembra che non ci sia proprio modo.
So di sicuro di stare per sbagliare qualcosa, ma francamente non saprei cosa.

aiedail92 Profilo | Expert

Ciao

Questo è il metodo che ho utilizzato io:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Se qualcosa non va o non capisci, chiedi pure

Luca

Tabris Profilo | Newbie

Grazie mille per il tuo supporto.
Mi sei di grande aiuto, e spero di non importunarti troppo se ti chiedo cosa dovrei inserire nello specifico come 3 parametro di Encode.
A furia di sembrarti stupido o un rompiscatole

aiedail92 Profilo | Expert

Nessun problema

Dato che l'algoritmo di crittografazione Rijndael potrebbe generare un numero di byte maggiore rispetto a quelli in entrata, la funzione per decrittografare ha bisogno di tutti quei byte, anche quelli che non possono essere "inseriti" nell'immagine perchè in sovrappiù. Quindi alla funzione Encode devi passare un array per riferimento (quindi non c'è bisogno che lo inizializzi, viene fatto all'interno della funzione), stesso array che poi devi passare alla funzione Decode per decodificare correttamente l'Immagine (quendi crea una variabile globale, o comunque salva l'array da qualche parte)

Luca

Tabris Profilo | Newbie

Non so davvero come poterti ringraziare. Spero di non averti importunato più del dovuto. Grazie ancora
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5