Domanda

Mi è stato assegnato il compito di implementare una libreria PKI in C # per un progetto aziendale e non sono stato in grado di trovarne una buona implementazione. Sembra che ci siano più librerie e molti collegamenti interrotti che puntano a librerie MSDN che sono state rimosse. Ho visto persone che usano Crypt32.dll, persone che costruiscono le proprie librerie, persone che usano P / Invoke per accedere agli archivi di certificati di sistema, persone che estendono le librerie integrate, esempi che semplicemente non si applicano a C # (ad esempio esempi Java), e biblioteche commerciali.

La mia domanda è: quale implementazione / libreria è più consigliata per la semplice crittografia / decrittografia dei dati?

Come sfondo per ciò che ho intenzione di fare con esso, ho semplicemente bisogno di crittografare i messaggi utilizzando una chiave privata (.pfx) e decrittografare con chiavi pubbliche (.cer). La firma e l'autenticazione dei messaggi non sono richieste a questo livello del progetto, anche se potrebbe essere in futuro. Ho visto riferimenti a lunghezze di crittografia che mi rendono inquieto. Dobbiamo essere in grado di crittografare qualsiasi messaggio di lunghezza (entro limiti ragionevoli, ovviamente!). È qualcosa di cui devo preoccuparmi e, in tal caso, c'è un modo per affrontarlo?

Preferirei non archiviare le chiavi pubbliche / private nel gestore certificati di Windows, se possibile, ma se rende l'implementazione significativamente più semplice, così sia.

Mi rendo conto che la PKI e la crittografia sono un argomento ampio e complesso, ma spero comunque in una libreria relativamente semplice ... (si può sperare, vero?)

Grazie!

È stato utile?

Soluzione

Bene, non hai detto che la classe integrata non copre le tue necessità, quindi che ne dici di System.Security.Cryptography.RSACryptoServiceProvider ?

Ha una vasta gamma di modi qualificati per crittografare / decrittografare asimmetricamente i flussi.

Esistono diversi tutorial / guide che ti accompagneranno lungo il percorso:

http://www.codeproject.com/KB/security/RSACryptoPad.aspx

http://www.eggheadcafe.com/articles/20020630.asp

Ce ne sono molte altre da trovare in Google .

Aggiorna : per quanto riguarda i limiti di lunghezza, non dovrebbero esserci problemi se si implementa lo stesso algoritmo buffer su entrambi i lati, crittografia e decrittografia.

Aggiornamento2 : Sì, il mio esempio era RSACryptoProvider , ma è possibile utilizzare qualsiasi classe derivata da System.Security.Cryptography.AsymmetricAlgorithm , se vuoi una chiave pubblica / privata -soluzione. O costruisci il tuo ... o forse no :)

Altri suggerimenti

Sì, cosa c'è che non va nelle classi integrate?

E se non vuoi usare l'archivio certificati di Windows puoi usare qualcosa del genere

RSACryptoServiceProvider rscp = new RSACryptoServiceProvider();
rscp.FromXmlString("<RSAKeyValue><Modulus>key data gere</Modulus><Exponent></Exponent></RSAKeyValue>");

Non sono sicuro che questa sia una buona idea per le chiavi private, tuttavia.

Esiste un buon tutorial sull'argomento qui

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