|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2012
Messaggi: 19
|
cifrario AES
salve a tutti,
sto smattando su un semplice cifrario. credevo di aver finito tutto ma all'ultimissima prova mi accorgo che ciò che voglio che faccia, sorpresa sorpresa non lo fa. riporto un po di codice e output. il cifrario Codice:
package cifrario; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; public class Cifrario { KeyGenerator keygenerator; SecretKey myDesKey; Cipher desCipher=null; public Cifrario(){ try { keygenerator = KeyGenerator.getInstance("DES"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } myDesKey = keygenerator.generateKey(); // Create the cipher try { desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); System.out.println("cifrario creato\n\n\n"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } }//costruttore public byte [] encrypt (String s){ try { desCipher.init(Cipher.ENCRYPT_MODE, myDesKey); } catch (InvalidKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte []text=null; byte [] string =s.getBytes(); try { text=desCipher.doFinal(string); } catch (IllegalBlockSizeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return text; } public byte [] decrypt (byte [] s){ try { desCipher.init(Cipher.DECRYPT_MODE, myDesKey); } catch (InvalidKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte []text=null; try { text=desCipher.doFinal(s); } catch (IllegalBlockSizeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return text; } } Codice:
package cifrario; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; public class main { public static void main(String[] argv) { Cifrario ciph=new Cifrario(); String s="Nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura, che la ritta via era smarrita\n sopralapancalacapracampa sotto la panca la capracrepa\n pablitoclavòunclavitoenlacalvadeuncalvito, enlacalvadeuncalvitoclavòunclavitopablito"; byte [] encrypted=ciph.encrypt(s); byte [] encrypted2=ciph.encrypt(s); String t1=new String(encrypted); byte [] decrypted =ciph.decrypt(t1.getBytes()); System.out.println("testo cifrato sotto forma di byte[]: "+encrypted); System.out.println("2 testo cifrato sotto forma di byte[]: "+encrypted2); System.out.println("t1.getbyte(): "+t1.getBytes()); System.out.println("testo cifrato sotto forma di stringa: "+ new String (encrypted)); System.out.println("t1: "+t1); System.out.println("testo decifrato sotto forma di byte: " + decrypted); System.out.println("testo decifrato sotto forma di stringa: "+new String (decrypted)); } } Codice:
testo cifrato sotto forma di byte[]: [B@18fb397 2 testo cifrato sotto forma di byte[]: [B@157b39f t1.getbyte(): [B@d1918a testo cifrato sotto forma di stringa: Ö@KjæºÕ]VÍŒd>€wÚ”|õØM!0oË*ˆîòY“*‚„´U#ÿã?©n"áëæ²o¾#¯%ÃÍŠ2?¹.ã <NM…f0]Ç-@“Ê#à8Ý¸Ž—?·òƒìUÁ#ðL{Õ%¤nÂt øUín?ŠÇ³â•ÚYaªÔãkLaqˆ”^!j6LˆÄ^‚5ïrÇ…æö„¶€oü§øg²ysU!’ÏÓåI+•g£NË‘‰#¬ý…S%³7îV”4OI|ö©Õ$ýû come potete notare se converto il byte[] in stringa e lo riconverto in byte[] il risultato è diverso (t1.getbite() e encrypted) il che è il problema principale da risolvere, ho necessità di poter convertire byte[] ---> String----->byte per un altro progetto (questo programmino semplice mi serve per testare la classe cifrario) . in secondo luogo non capisco perchè encrypted ed encrypted2 debano essere diversi se sono il risultato della stessa funzione con lo stesso input (questa è più che altro una mia curiosità). inoltre se avete sugerimenti su come migliorare la classe cifrario sono ben accetti. grazie mille per ogni possibile aiuto Ultima modifica di atelzut2 : 21-10-2014 alle 11:58. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:28.