andbin ha scritto:
Savat5 ha scritto:
La chiave creata è la stessa
Ascolta, te lo dico gentilmente: generateKey() genera una nuova chiave completamente casuale. Se quando cifri il file invochi un generateKey() e quando decifri invochi un'altra volta un generateKey() ... hai sbagliato.
Se non hai fatto così, non posso saperlo, non vedendo per intero l'architettura e il codice usato.
Grazie per la gentilezza, XD.
Comunque hai ragione, dopo aver risposto ho rivisto il codice e sto provando a correggerlo;
Codice Decrittatore
final int TOKEN_LENGHT = 5;
SecretKey desKey;
Cipher desCipher = Cipher.getInstance("DESede");
//prende la chiave creata dal crittatore
FileInputStream keyFos = new FileInputStream("key.txt");
//Provo, erroneamente, a salvare la chiave
keyFos.read(desKey.getEncoded());
keyFos.close();
//Prendo in ingresso il file
byte [] fcritt = new byte[(int) (new File("Prova.crypt.txt")).length()];
FileInputStream fis = new FileInputStream("Prova.crypt.txt");
fis.read(fcritt);
fis.close();
FileOutputStream fos = new FileOutputStream("Elemento.txt");
desCipher.init(Cipher.DECRYPT_MODE, desKey);
for(int i=0; i<fcritt.length; i+=TOKEN_LENGHT){
byte[] ciphertoken = desCipher.update(fcritt, i, TOKEN_LENGHT);
fos.write(ciphertoken);
}
fos.close();
}
La parte di codice del crittatore che crea la chiave è:
final int TOKEN_LENGHT = 5;
KeyGenerator keygen = KeyGenerator.getInstance("DESede");
SecretKey desKey = keygen.generateKey();
FileOutputStream keyFos = new FileOutputStream("key.txt");
//Salva la chiave in key.txt
keyFos.write(desKey.getEncoded());
keyFos.close();
*EDIT* Scusa ancora, ero convinto che con generatekey, usando gli stessi parametri, ottenessi la medesima chiave. Si vede che sono ancora agli inizi. XD
*EDIT2*
Il mio vero problema riguarda come prendere la chiave.
Mi spiego meglio, ho creato la chiave key.txt... ora java mi fornisce FileInputStream per leggere un flusso di byte, e ovviamente con FileinputStream Fis = ...
Fis.read (byte []) vorrà un array di byte... e la chiave mi serve nel formato Secretkey e, come c'era da aspettarsi, la conversione non è immediata con:
Fis.read(array)
SecretKey deskey = (SecretKey) array
L'oggetto SecretKey deskey mi serve per
Codice: Seleziona tutto
Cipher desCipher = Cipher.getInstance("DESede");
desCipher.init(Cipher.DECRYPT_MODE, deskey);