Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Cifratura RSA
venerdì 28 maggio 2010 - 15.32
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
CeccoCQ
Profilo
| Newbie
5
messaggi | Data Invio:
ven 28 mag 2010 - 15:32
Salve ragazzi,
non sapevo dove scrivere questo post però vi illustro bene il mio immenso problema.
Sto realizzando un applicazione client-server che si scambiano informazioni tramite RSA.
LATO SERVER:
La tecnologia utilizzata è java.
Ho dunque generato le mie chiavi con il comando keytool, in particolare:
codice:
keytool -genkey -alias myalias -keyalg RSA -validity 10000 -keystore my.keystore
e successivamente ho esportato il mio certificato da "dare" al client:
codice:
keytool -export -alias myalias -file cert.cer -keystore my.keystore
Nel mio codice java ho inserito questo codice
codice:
keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(new FileInputStream("C:\\my.keystore"), "mypass".toCharArray());
Key key = keyStore.getKey("myalias", "mypass".toCharArray());
if (key instanceof PrivateKey) {
Certificate cert = keyStore.getCertificate("myalias");
PublicKey pubKey = cert.getPublicKey();
privKey = (PrivateKey)key;
}
Successivamente sono passato ad implementare il modulo per la decifratura, che suona più o meno così:
codice:
byte[] toDecodeBytes = new BigInteger(encodeMessageHex, 16).toByteArray();
Cipher decCipher = Cipher.getInstance("RSA");
decCipher.init(Cipher.DECRYPT_MODE, privKey);
byte[] decodeMessageBytes = decCipher.doFinal(toDecodeBytes);
String decodeMessageString = new String(decodeMessageBytes);
LATO CLIENT:
Da questa parte (purtroppo) non ho un'applicazione Java, bensì un client scritto in C#.
Quello che ho fatto è salvare il file cert.cer sulla macchina client e fare una cosa del genere:
codice:
X509Certificate2 x509 = new X509Certificate2();
byte[] rawData = ReadFile("mycert.cer");
x509.Import(rawData);
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)x509.PublicKey.Key;
byte[] plainbytes = System.Text.Encoding.ASCII.GetBytes("My Secret");
byte[] cipherbytes = rsa.Encrypt(plainbytes, true);
String cipherHex = convertToHex(cipherContent);
byte[] byteArray = encoding.GetBytes(cipherHex);
....
ed invio il mio pacchetto con una post.
In questo caso il server riceve correttamente l'esadecimale, ma quando va a decifrare il pacchetto sclera e mi da un
javax.crypto.BadPaddingException: Data must start with zero
Ho provato allora a settare il cipher con "RSA/ECB/NoPadding" che non va in eccezione ma il pacchetto che decodifica è diverso nel contenuto. (Esce una stringa totalmente diversa e incomprensibile).
Qualcuno può aiutarmi gentilmente?
Torna su
Stanze Forum
Elenco Threads
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 !