2011-12-12 13 views
9

Ho la matrice di byte della chiave pubblica RSA. Ho trovato su internet che posso creare un oggetto PublicKey vera e propria di esso utilizzando questo codice:Java: Come creare una chiave pubblica RSA dalla stringa

PublicKey publicKey = 
    KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(bytes)); 

Ma ogni volta che esegue questo codice, sto ricevendo un altro risultato per i dati crittografati utilizzando la chiave. Sono sicuro che i dati che voglio crittografare sono sempre gli stessi, così come la matrice di byte che rappresenta la chiave.

È normale?

Ecco il mio codice produce sempre un'altra uscita:

byte[] keyBytes = Base64.decodeBase64(rsa_1024_public_key); 
     // rsa_1024_public key is a constant String 

Cipher c = Cipher.getInstance("RSA"); 

PublicKey publicKey = 
    KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(keyBytes)); 

c.init(Cipher.ENCRYPT_MODE, publicKey); 

return c.doFinal(password.getBytes()); 

Questa è probabilmente una parte del algoritmo di crittografia asimmetrica?

Grazie.

+0

RSA non è deterministico. – SLaks

+0

@SLaks: vuoi postarlo come risposta? È corretto: D Darò 35 punti rep. –

+0

In realtà 15; Ho raggiunto il limite della reputazione molto tempo fa. :) – SLaks

risposta

7

RSA non è deterministico.

È possibile renderlo deterministico selezionando una modalità di riempimento non casuale; tuttavia, ciò non sarà sicuro.

+0

Ne darò dieci la prossima settimana oke? –

+0

Non preoccupatevi; Generalmente colpisco il limite dei rep ogni giorno della settimana. – SLaks