Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Errore ";" java

  1. #1

    Errore ";" java

    In una classe main il compilatore java (1.4) mi da il seguente errore:

    root@localhost:~# javac Stealthing.java
    Stealthing.java:31: ';' expected
    public static void main(String args[]) trows Exception {
    ^
    1 error

    Qui di seguito vi pasto la classe:

    public static void main(String args[]) trows Exception {
    char[] pass= args[1].toCharArray();
    FileInputStream input = FileStreamInput(args[2]);
    FileOutputStream out = FileStreamOut(args[3]);

    BufferReader file = new BufferReader();

    if("-c".equals(args[0])) { crypt(pass,input,out); }
    else if("-d".equals(args[0])) { decrypt(pass,input,out); }
    else{ usage(); }
    }

    Premetto che vi ho pastato solo la classe main e non le altre, se no diventava troppo lungo. Dov'è che sbaglio?
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  2. #2
    throws non trows

  3. #3
    Ehm... facciamo finta che non sia successo niente... grazie di avermi fatto vedere la luce
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  4. #4
    Scusate questo verrà un post un pò lungo stavolta non so che cavolo sia successo... vi posto il codice sorgente e gli errori.

    import java.security.*;
    import javax.crypto.*;
    import javax.crypto.spec.*;
    import java.util.*;


    /*Commentare la riga seguente se non si usa una Virtual Machine basata su SUN*/

    import sun.misc.*;

    /*Togliere i commenti nella riga seguente se non si usa una VM basata su SUN*/

    /* import com.isnetworks.base64.* */


    class stealth
    {

    private static void usage() {

    System.err.println("Usage: stealth { -c [password] <testo_da_criptare> | -d [password] <testo_da_decriptare> }\n");

    }
    private static int ITER=1000;

    /*Il main, dove c'è il controllo dell'input*/

    public static void main(String args[]) throws Exception {
    char[] pass= args[1].toCharArray();
    String testo= args[2];
    if("-c".equals(args[0])) {out = crypt(pass,testo); }
    else if("-d".equals(args[0])) {out = decrypt(pass, testo);}
    else{ usage(); }
    System.out.println(out);
    }

    /*Il metodo seguente serve per la cifratura. Elabora la chiave e cripta il file.*/

    public static String crypt(char[] pass, String specialtesto) {
    System.out.println("Loading...\n");
    byte[] bit = new byte[8]; /*Crea il salt per la password*/
    Random rand = new Random(); /*Crea il meccanismo di scelta casuale del byte del salt*/
    rand.nextBytes(bit); /*Sceglie un byte casuale*/
    PBEKeySpec chiave = new PBEKeySpec(pass); /*Serve per costruire la chiave basata su password*/
    SecretKeyFactory fatto = SecretKeyFactory.getInstance("PBEWithSHAAndBlowfis h-CBC"); /*Ottengo il generatore della chiave per la crittografia*/
    SecretKey chi = fatto.generateSecret(chiave); /*Creo di fatto la chiave*/
    PBEParameterSpec param = new PBEParameterSpec(bit, ITER); /*Creo il salt e le ripetizioni*/
    Cipher cip = Cipher.getInstance("PBEWithSHAAndBlowfish-CBC");/*Creo il cifrario e lo preparo per il tipo di cifratura che voglio fare*/
    cip.init(Cipher.ENCRYPT_MODE, chi, param); /*Inizializzo la cifratura*/
    byte[] criptofile = cip.doFinal(specialtesto.getBytes()); /*Cripto di fatto*/
    BASE64Encoder enco = new BASE64Encoder(); /*Creo il codificatore BASE 64*/
    String salti = enco.encode(bit); /*Encodo i salt*/
    String testocriptato = enco.encode(criptofile); /*Encodo il testo criptato*/
    System.out.println("Finito!\n");
    System.out.println("\nIl testo criptato è: "+salti+testocriptato+"");
    return(salti+testocriptato);
    }

    /*Il metodo seguente serve per la decifratura. Elabora la password e decripta il file*/

    public static String decrypt(char[] pass, String testo) {
    String numsalt = testo.substring(0, 12); /*suddivide il file in testo e salt*/
    String testocifr = testo.substring(12, testo.length());
    /*Qui fa lo stesso procedimento descritto in encrypt(), tranne per il parametro DECRYPT_MODE (serve per decriptare)*/
    BASE64Decoder deco = new BASE64Decoder();
    byte[] ciao = deco.decodeBuffer(numsalt);
    byte[] riciao = deco.decodeBuffer(testocifr);
    PBEKeySpec kyo = new PBEKeySpec(pass);
    SecretKeyFactory fcto = SecretKeyFactory.getInstance("PBEWithSHAAndBlowfis h-CBC");
    SecretKey secrt = fcto.generateSecret(kyo);
    PBEParameterSpec spec = new PBEParameterSpec(ciao, ITER);
    Cipher cript = Cipher.getInstance("PBEWithSHAAndBlowfish-CBC");
    cript.init(Cipher.DECRYPT_MODE, secrt, spec);
    byte[] outtext = cript.doFinal(riciao);
    System.out.println("Decifratura completata.\n\n");
    System.out.println("Testo decifrato: "+outtext+"");
    return new String(outtext);
    }
    }

    **********************
    E adesso gli errori:

    root@localhost:~# javac Stealthing.java
    Stealthing.java:46: unreported exception java.security.NoSuchAlgorithmException; must be caught or declared to be thrown
    SecretKeyFactory fatto = SecretKeyFactory.getInstance("PBEWithSHAAndBlowfis h-CBC"); /*Ottengo il generatore della chiave per la crittografia*/
    ^
    Stealthing.java:47: unreported exception java.security.spec.InvalidKeySpecException; must be caught or declared to be thrown
    SecretKey chi = fatto.generateSecret(chiave); /*Creo di fatto la chiave*/
    ^
    Stealthing.java:49: unreported exception java.security.NoSuchAlgorithmException; must be caught or declared to be thrown
    Cipher cip = Cipher.getInstance("PBEWithSHAAndBlowfish-CBC");/*Creo il cifrario e lo preparo per il tipo di cifratura che voglio fare*/

    Mi sono fermato, ma ce ne sono altri e sono tutti "unreported exception"... mi viene da piangere
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  5. #5
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao.. è ovvio ti dia questi errori... infatti tu non hai gestito le possibili eccezioni che si possono generare. Per fare ciò puoi operare in tre modi.
    1) Mettere tanti blocchi try{}catch{} quante sono le eccezioni che potresti voler gestire
    2) Mettere 2 blocchi try{}catch{Exception e){} uno in crypt ed uno in decrypt
    3) dire che crypt e decrypt possono sollevare queste eccezioni;
    In questi ultimi due casi avresti:

    Caso 2):
    public static String crypt(char[] pass, String specialtesto) {
    try{
    System.out.println("Loading...\n");
    byte[] bit = new byte[8]; /*Crea il salt per la password*/
    Random rand = new Random();
    /*Crea il meccanismo di scelta casuale del byte del salt*/
    rand.nextBytes(bit); /*Sceglie un byte casuale*/
    PBEKeySpec chiave = new PBEKeySpec(pass);
    /*Serve per costruire la chiave basata su password*/
    SecretKeyFactory fatto = SecretKeyFactory.getInstance(
    "PBEWithSHAAndBlowfish-CBC");
    /*Ottengo il generatore della chiave per la crittografia*/
    SecretKey chi = fatto.generateSecret(chiave); /*Creo di fatto la chiave*/
    PBEParameterSpec param = new PBEParameterSpec(bit, ITER);
    /*Creo il salt e le ripetizioni*/
    Cipher cip = Cipher.getInstance("PBEWithSHAAndBlowfish-CBC");
    /*Creo il cifrario e lo preparo per il tipo di cifratura che voglio fare*/
    cip.init(Cipher.ENCRYPT_MODE, chi, param); /*Inizializzo la cifratura*/
    byte[] criptofile = cip.doFinal(specialtesto.getBytes());
    /*Cripto di fatto*/
    BASE64Encoder enco = new BASE64Encoder();
    /*Creo il codificatore BASE 64*/
    String salti = enco.encode(bit); /*Encodo i salt*/
    String testocriptato = enco.encode(criptofile);
    /*Encodo il testo criptato*/
    System.out.println("Finito!\n");
    System.out.println("\nIl testo criptato è: " + salti + testocriptato + "");
    return (salti + testocriptato);
    }catch( Exception e ){

    e.printStackTrace();
    return null;
    }
    }

    /*Il metodo seguente serve per la decifratura. Elabora la password e decripta il file*/
    public static String decrypt(char[] pass, String testo) {
    try{
    String numsalt = testo.substring(0, 12);
    /*suddivide il file in testo e salt*/
    String testocifr = testo.substring(12, testo.length());
    /*Qui fa lo stesso procedimento descritto in encrypt(), tranne per il parametro DECRYPT_MODE (serve per decriptare)*/
    BASE64Decoder deco = new BASE64Decoder();
    byte[] ciao = deco.decodeBuffer(numsalt);
    byte[] riciao = deco.decodeBuffer(testocifr);
    PBEKeySpec kyo = new PBEKeySpec(pass);
    SecretKeyFactory fcto = SecretKeyFactory.getInstance(
    "PBEWithSHAAndBlowfish-CBC");
    SecretKey secrt = fcto.generateSecret(kyo);
    PBEParameterSpec spec = new PBEParameterSpec(ciao, ITER);
    Cipher cript = Cipher.getInstance("PBEWithSHAAndBlowfish-CBC");
    cript.init(Cipher.DECRYPT_MODE, secrt, spec);
    byte[] outtext = cript.doFinal(riciao);
    System.out.println("Decifratura completata.\n\n");
    System.out.println("Testo decifrato: " + outtext + "");
    return new String(outtext);
    }catch( Exception e ){

    e.printStackTrace();
    return null;
    }
    }


    Caso 3:

    public static String crypt(char[] pass, String specialtesto) throws Exception {

    System.out.println("Loading...\n");
    byte[] bit = new byte[8]; /*Crea il salt per la password*/
    Random rand = new Random();
    /*Crea il meccanismo di scelta casuale del byte del salt*/
    rand.nextBytes(bit); /*Sceglie un byte casuale*/
    PBEKeySpec chiave = new PBEKeySpec(pass);
    /*Serve per costruire la chiave basata su password*/
    SecretKeyFactory fatto = SecretKeyFactory.getInstance(
    "PBEWithSHAAndBlowfish-CBC");
    /*Ottengo il generatore della chiave per la crittografia*/
    SecretKey chi = fatto.generateSecret(chiave); /*Creo di fatto la chiave*/
    PBEParameterSpec param = new PBEParameterSpec(bit, ITER);
    /*Creo il salt e le ripetizioni*/
    Cipher cip = Cipher.getInstance("PBEWithSHAAndBlowfish-CBC");
    /*Creo il cifrario e lo preparo per il tipo di cifratura che voglio fare*/
    cip.init(Cipher.ENCRYPT_MODE, chi, param); /*Inizializzo la cifratura*/
    byte[] criptofile = cip.doFinal(specialtesto.getBytes());
    /*Cripto di fatto*/
    BASE64Encoder enco = new BASE64Encoder();
    /*Creo il codificatore BASE 64*/
    String salti = enco.encode(bit); /*Encodo i salt*/
    String testocriptato = enco.encode(criptofile);
    /*Encodo il testo criptato*/
    System.out.println("Finito!\n");
    System.out.println("\nIl testo criptato è: " + salti + testocriptato + "");
    return (salti + testocriptato);

    }

    /*Il metodo seguente serve per la decifratura. Elabora la password e decripta il file*/
    public static String decrypt(char[] pass, String testo) throws Exception {

    String numsalt = testo.substring(0, 12);
    /*suddivide il file in testo e salt*/
    String testocifr = testo.substring(12, testo.length());
    /*Qui fa lo stesso procedimento descritto in encrypt(), tranne per il parametro DECRYPT_MODE (serve per decriptare)*/
    BASE64Decoder deco = new BASE64Decoder();
    byte[] ciao = deco.decodeBuffer(numsalt);
    byte[] riciao = deco.decodeBuffer(testocifr);
    PBEKeySpec kyo = new PBEKeySpec(pass);
    SecretKeyFactory fcto = SecretKeyFactory.getInstance(
    "PBEWithSHAAndBlowfish-CBC");
    SecretKey secrt = fcto.generateSecret(kyo);
    PBEParameterSpec spec = new PBEParameterSpec(ciao, ITER);
    Cipher cript = Cipher.getInstance("PBEWithSHAAndBlowfish-CBC");
    cript.init(Cipher.DECRYPT_MODE, secrt, spec);
    byte[] outtext = cript.doFinal(riciao);
    System.out.println("Decifratura completata.\n\n");
    System.out.println("Testo decifrato: " + outtext + "");
    return new String(outtext);
    }


    Nota bene che se usi il terzo caso deleghi chi richiama il metodo a gestire l'eccezioni che si possono generare e quindi alla fin fine sempre un blocco try/catch dovrai utilizzare.
    Per il caso 1) esso è identico a 2) solo che ci sono tanti try/catch per quante sono le possibili eccezioni che si possono generare.
    Ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  6. #6

    sono una principiante

    però anche a me succede spesso... e ho notato che nel tuo sorgente non esiste un
    try {
    ............
    } catch (Exception e) {
    .........
    }

    questa istruzione permette di catturare le eccezioni... ed alcune istrizioni richiedono di essere messe dentro un try...

    Io di solito apro il try all'inizio e lo chiudo alla fine. nel catch ci metto sempre un System.err.println("Errore : " + e.getMessage());
    :tongue:

  7. #7
    Credevo non mi rispondesse nessuno invece... grazie comunque, avevo letto che con l'opzione throws Exception si lasciassero le eccezioni alla VM, avrò capito male :master: vabbè adesso faccio riposare il mio neurone prima di correggere il programma e di avere un altro collasso al momento della compilazione grazie ancora
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  8. #8
    Usando il codice che mi hai fornito è andato tutto liscio (tranne per gli algortimi, avendo un JCE della Sun ho dovuto usare il DES con MD5 per la password )... ho poi anche capito che ho fatto degli errori stupidi, adesso ci cimenterò in cose più complicate, stando più attento :gren: grazie ancora a tutti quelli che hanno risposto!
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  9. #9

    [JAVA] Criptare una stringa - Algoritmi di criptazione

    Posto qui perchè per il mio scopo ho preso spunto da questo 3d anche se il titolo non è preciso.

    Sto cercando di creare un sistema che cripti alcuni dati.
    Poichè non mi interessa la totale sicurezza dell'algoritmo ma voglio solo nascondere alcune informazioni all'utente standard ho guardato i package javax.crypto.*.

    Cercando di eseguire la classe che ho creato viene lanciata una java.security.NoSuchAlgorithmException da questa riga di codice:
    codice:
    SecretKeyFactory fatto = SecretKeyFactory.getInstance("AES");
    Guardando la documentazione ho visto che il pafametro del metodo getInstance deve essere specificato come indicato a questo link all'appendice A.
    http://java.sun.com/j2se/1.4.2/docs/...uide.html#AppA

    Ho provato con alcuni dei valori indicati ma ottengo sempre la stessa eccezione.

    Qualcuno ha idee?!?
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

  10. #10

    soluzione

    Ho risolto così:

    *** codifica ***
    codice:
    String userPassword = "at piasaria";
    String encoding = new sun.misc.BASE64Encoder().encode(userPassword.getBytes());

    *** decodifica ***
    codice:
    byte [] decoded = new sun.misc.BASE64Decoder().decodeBuffer(encoding);
    ..::200 post il 1 settembre 2004::..
    ..::100 13/07/2004::..
    ..): Web Site (pazienza però) ..
    VASCO castiga chi non lecca la FIGA

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.