La mia organizzazione ha deciso di crittografare alcuni dati nel nostro database e mi è stato assegnato il compito di implementare la crittografia. Devo essere in grado di crittografare i dati, archiviare la versione crittografata in un campo VARCHAR nel nostro database, e successivamente recuperarla e decrittarla al suo solito stato.Come posso implementare una crittografia forte e reversibile che interagisca tra ASP.NET 2.0, Coldfusion 5 e Classic ASP?
Sulla superficie sembra un compito semplice. Esistono diversi modi per implementare la crittografia. Uno che ho usato prima è basato sul codice di crittografia AES trovato in this StackOverflow question.
Ciò che rende più difficile in questo caso, è la necessità di scrivere codice per crittografare/decodificare i dati in varie applicazioni che accedono al nostro database, alcuni dei quali sono sviluppati utilizzando tecnologie diverse. Abbiamo applicazioni scritte in Coldfusion 5, in ASP classico e in ASP.NET 2.0. Devo essere in grado di crittografare i dati e archiviarli nel database con il codice Coldfusion, quindi leggerlo e decodificarlo nella sua forma originale in ASP.NET. Oppure crittografalo in ASP classico e decrittalo in Coldfusion. O qualsiasi altra combinazione di queste piattaforme.
Questo ha dimostrato di essere più difficile di quanto mi aspettassi. Diverse classi/oggetti/funzioni/librerie che pretendono di utilizzare gli stessi algoritmi sembrano generare risultati diversi anche se vengono dati gli stessi dati e lo stesso segreto condiviso. In passato, abbiamo utilizzato CAPICOM per fornire l'interoperabilità della crittografia tra Coldfusion e Classic ASP. Ma ho avuto problemi a cercare di farlo funzionare in ASP.NET. Ho letto this article about how to get CAPICOM to work in .NET, ma i suggerimenti non hanno funzionato per me. Non riesco nemmeno a sembrare di generare una classe di interoperabilità o di importare un riferimento all'oggetto COM senza ottenere un errore. Inoltre, alcuni dei nostri server di produzione hanno sistemi operativi che non sembrano essere compatibili con CAPICOM, quindi potrebbe comunque essere un vicolo cieco.
Qualcuno ha qualche suggerimento su come posso implementare la crittografia in modo tale che una qualsiasi delle 3 piattaforme possa decrittografare ciò che gli altri hanno crittografato, usando comunque un algoritmo ragionevolmente forte?
Edit 2011-12-29:
Come notato nei commenti qui sotto, Attualmente sto sperando di trovare una soluzione ASP.NET che è compatibile con alcuni dei nostri ASP classico codice Coldfusion esistente/che utilizza CAPICOM. Il motivo è che il nostro team non vuole che introduca un nuovo metodo di crittografia nel nostro codice per il nostro scopo attuale, a meno che non modifichi anche le nostre vecchie app utilizzando la crittografia per uno scopo diverso per utilizzare lo stesso metodo. Vuole utilizzare lo stesso metodo di crittografia per entrambi gli scopi. Poiché rivedere le nostre vecchie app per utilizzare un nuovo metodo di crittografia significa non solo modificare il codice, ma anche rintracciare tutti i dati crittografati dalle vecchie app, decrittografarlo e ricodificarlo con il nuovo metodo, sono titubante quella via a meno che non sia necessario. Spero di trovare un modo per far sì che ASP.NET legga i dati crittografati esistenti.
I dati crittografati delle altre applicazioni Coldfusion e ASP Classic sono stati codificati utilizzando l'oggetto COM CAPICOM. Per quanto posso dire, le impostazioni sono universalmente state crittografia AES, dimensione massima della chiave (che credo sia 256 bit in AES).
A @ richiesta di Leigh, ecco un esempio semplificato di come le nostre applicazioni CF esistenti utilizzano CAPICOM:
<cfscript>
encryptObject = CreateObject("com","CAPICOM.EncryptedData");
encryptObject.Algorithm.Name = 4; // 4 is AES
encryptObject.Algorithm.KeyLength = 0; // 0 is MAX, I believe 256-bit in the case of AES
encryptObject.SetSecret(sharedSecret);
encryptObject.Content = stringToEncrypt;
encryptedData = localScope.encryptObject.Encrypt();
</cfscript>
Si prega di prestare più attenzione alle vostre scelte tag. Il tag 'asp' si era dimostrato ambiguo, ed è stato ripulito a favore di' asp-classic'. Avresti avuto l'unica domanda su Stack Overflow tagged 'asp', e che avrebbe dovuto inviare una grossa bandiera rossa. –
@Joel Le mie scuse. Non me ne sono accorto, ma guarderò con più attenzione in futuro. –
Che tipo di prodotto database stai usando? –