Disclaimer: Conosco Java e la crittografia, ma la mia conoscenza di C# e .NET è molto limitata. Sto scrivendo qui solo sotto l'influenza delle mie competenze di Google-fu.
Supponendo che si potrebbe decodificare una chiave privata RSA PKCS # 8-encoded, poi, da quanto ho letto su MSDN, il resto del codice dovrebbe essere simile a questo:
byte[] hv = MD5.Create().ComputeHash(data);
RSACryptoServiceProvider rsp = new RSACryptoServiceProvider();
RSAParameters rsp = new RSAParameters();
// here fill rsp fields by decoding pkcs8PrivateKey
rsp.ImportParameters(key);
RSAPKCS1SignatureFormatter rf = new RSAPKCS1SignatureFormatter(rsp);
rf.SetHashAlgorithm("MD5");
byte[] signature = rf.CreateSignature(hv);
Le classi rilevanti sono in lo spazio dei nomi System.Security.Cryptography
.
Come per la decodifica blob dei tasti PKCS n. Il codice sorgente è fornito ed è un singolo file C#. Da quello che ho letto, quel codice decodifica il file PKCS # 8 "manualmente"; indirettamente, questo dovrebbe significare che .NET (2.0) non ha funzionalità per la decodifica dei file chiave PKCS # 8 (altrimenti l'autore di tale strumento non sarebbe andato incontro al problema di implementare tale decodifica). Per il tuo compito a portata di mano, puoi recuperare da quel file sorgente le parti di cui hai bisogno, saltando qualsiasi cosa su PEM e la crittografia simmetrica; il tuo punto di ingresso sarebbe la funzione DecodePrivateKeyInfo()
, che a quanto pare si aspetta un file PKCS # 8 non codificato DER codificato, proprio come Java PKCS8EncodedKeySpec
.
fonte
2010-02-19 19:38:13
un po 'off-topic, ma, se possibile, si dovrebbe assolutamente evitare di utilizzare MD5 in tutte le applicazioni – Krystian
'Dovrebbe' è una parola forte, anche se MD5 è stato dimostrato debole che può essere facilmente rotto (vedi http : //merlot.usc.edu/csac-f06/papers/Wang05a.pdf, come riportato da Wikipedia) non è sempre compito del programmatore decidere. :-) – Patrick
@Krystian, è stata una decisione presa da chi ha costruito l'interfaccia 6 anni fa :) – balint