Domanda

Non sono un esperto di crittografia, ma a quanto ho capito, 3DES è un algoritmo di crittografia simmetrica, il che significa che non utilizza chiavi pubbliche / private.

Tuttavia, mi è stato assegnato il compito di crittografare i dati utilizzando una chiave pubblica, (in particolare un file .CER). Se ignori l'intero ringraziamento simmetrico / asimmetrico, dovrei solo essere in grado di utilizzare i dati della chiave pubblica come chiave TripleDES. Tuttavia, ho difficoltà a estrarre i byte chiave dal file .CER. Questo è il codice così com'è ..

TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
X509Certificate2 cert = new X509Certificate2(@"c:\temp\whatever.cer");
cryptoProvider.Key = cert.PublicKey.Key.

Il metodo più semplice che riesco a trovare per estrarre i byte di chiave grezza dal certificato è ToXmlString (bool), e quindi eseguire una sottostringa irregolare sulla stringa restituita. Tuttavia, questo sembra così hacker che sento che mi manca un modo più semplice, più ovvio per farlo.

Mi sto perdendo un modo più semplice di usare un file .cer per fornire i dati chiave alla classe crypto C # 3DES, o l'hacking dalla stringa xml del certificato è davvero il modo migliore per farlo?

È stato utile?

Soluzione

cryptoProvider.Key = cert.GetPublicKey ()?

Altri suggerimenti

Non è una buona idea usare le chiavi generate per la crittografia asimmetrica per la crittografia simmetrica. Non c'è nulla che ti impedisca di escogitare un modo per utilizzare una chiave pubblica come chiave di crittografia per 3DES, ma il risultato finale sarà che chiunque abbia accesso alla chiave pubblica (e questo significa che tutti!) Sarà in grado di decrittografare il tuo testo cifrato .

La crittografia di grandi quantità di dati con crittografia asimmetrica non è la strada da percorrere. Invece, crittografa i dati con un algoritmo simmetrico e crittografa la chiave simmetrica (e IV) con la tua chiave pubblica.

Questa pagina da MSDN davvero mi ha aiutato ad andare avanti con la crittografia simmetrica .Net.

Il vero problema qui è che la chiave pubblica è, beh, pubblica . Il significato è liberamente disponibile, il che significa che non fornisce alcuna sicurezza di crittografia.

Diamine, chiunque in questo thread ha tutte le informazioni necessarie per decifrare tutto. Così fanno i googler.

Prova a incoraggiare i tuoi utenti a non utilizzare tali dati di chiave pubblica. Per lo meno, fagli dare una password o qualche altro pezzo leggermente più sicuro che puoi usare per generare una chiave coerente.

Un'altra cosa. Le chiavi del certificato variano di dimensioni. Probabilmente può gestire l'eliminazione di byte extra nella chiave, ma probabilmente otterrai un'eccezione Indice array / fuori limite se la chiave risulta essere più corta di quella necessaria dalla chiave 3DES. Dubito che accadrà, 3DES ha solo bisogno di 56 bit e le chiavi di certificato sono quasi sempre 256 bit o più grandi.

Penso che ciò che ti manca sia la conversione dei byte dalla stringa contenente i byte chiave.

Spero che il metodo FromBase64String ti aiuterà:

byte[] keyBytes = Convert.FromBase64String(sourceString);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top