Stavo eseguendo delle prove di criptaggio e decriptaggio tramite javax.crypto, e finchè ho usato l'IV non ho avuto il minimo problema ad ottenere entrambe le cose. Tuttavia, nel programma in cui mi servono realmente queste due funzioni, non ho modo di gestire l'IV, perchè cripto dei singoli file e salvare l'IV nel nome è impossibile (non sono accettati come caratteri), e internamente è complicato in fase di lettura, quando va distinto dal resto del testo; ho pertanto cercato di capire se si può procedere senza: sia tramite documentazione (http://docs.oracle.com/javase/6/docs...to/Cipher.html), sia tramite un link passatomi da MItaly, sembra che si possa tranquillamente, ma quando tento di farlo ottengo un'eccezione che mi dice che manca l'IV o un altro parametro, la qual cosa mi lascia perplesso.

Ecco la parte di codice interessata, in cui cripto e poi successivamente decripto senza IV:

codice:
String ktp="Cantami, o Diva, del Pelìde Achille l'ira funesta che infiniti addusse lutti agli Achei, molte anzi tempo all'Orco generose travolse alme d'eroi, e di cani e d'augelli orrido pasto lor salme abbandonò (così di Giove l'alto consiglio s'adempìa), da quando primamente disgiunse aspra contesa il re de' prodi Atride e il divo Achille. E qual de' numi inimicolli? Il figlio di Latona e di Giove. Irato al Sire destò quel Dio nel campo un feral morbo, e la gente perìa: colpa d'Atride che fece a Crise sacerdote oltraggio. Degli Achivi era Crise alle veloci prore venuto a riscattar la figlia con molto prezzo. In man le bende avea, e l'aureo scettro dell'arciero Apollo: e agli Achei tutti supplicando, e in prima ai due supremi condottieri Atridi: O Atridi, ei disse, o coturnati Achei, gl'immortali del cielo abitatori concedanvi espugnar la Prïameia cittade, e salvi al patrio suol tornarvi."; String key="3a+gmè120amsè°3b"; byte keyb[]=key.getBytes(); byte ini[]=ktp.getBytes(); Cipher cp=Cipher.getInstance("AES/CBC/PKCS5PADDING"); SecretKeySpec kps=new SecretKeySpec(keyb,"AES"); cp.init(Cipher.ENCRYPT_MODE,kps); byte fin[]=cp.doFinal(ini); String enc=new String(fin); System.out.println("Testo cifrato: "+enc); Cipher cp1=Cipher.getInstance("AES/CBC/PKCS5PADDING"); cp1.init(Cipher.DECRYPT_MODE,kps); byte alt[]=cp1.doFinal(fin); String dec=new String(alt); System.out.println("Testo decifrato: "+dec);
E anche l'eccezione che ottengo:

Exception in thread "main" java.security.InvalidKeyException: Parameters missing at com.sun.crypto.provider.CipherCore.init(CipherCore .java:388) at com.sun.crypto.provider.AESCipher.engineInit(AESCi pher.java:186) at javax.crypto.Cipher.implInit(Cipher.java:787) at javax.crypto.Cipher.chooseProvider(Cipher.java:849 ) at javax.crypto.Cipher.init(Cipher.java:1213) at javax.crypto.Cipher.init(Cipher.java:1153) at ProveHash.main(ProveHash.java:59)
ProveHash è il nome del file, si chiama così perchè nella prima parte ho anche fatto delle prove di hash. La riga 59 del file è quella che contiene "cp1.init(Cipher.DECRYPT_MODE,kps);".
Idee?