Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 26
  1. #11
    Forse il problema sta proprio nella chiave.
    Come faccio a far diventare una stringa come questa "6f9ec88b789251a862ac66239a20088f" (cioè una stringa a 128 bits in formato esadecimale) un oggetto di tipo key?

    Quando io eseguo queste righe...

    String key = "6f9ec88b789251a862ac66239a20088f";
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");

    Il programma mi ritorna il seguente errore.
    java.security.InvalidKeyException: Illegal key size or default parameters
    Sembra che non gli piacia la dimensione della chiave. Ma l'algoritmo AES accetta chiavi fino a 256bits!!!??

    Inoltre tu usi negli esempi che mi hai postato un oggetto Key
    Che import devo utilizzare per tale oggetto?

  2. #12
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    infatti proprio quello che mi puzza..
    io per la creazione di quella chiave uso

    codice:
        public Key generateKey() throws NoSuchAlgorithmException, NoSupportAlgorithmException{
    
            KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
            
            if(ALGORITHM.equalsIgnoreCase("DES")){
            	keyGen.init(56);
            }
            
            if(ALGORITHM.equalsIgnoreCase("DESede") || ALGORITHM.equalsIgnoreCase("TripleDES")){
            	keyGen.init(168);
            }
            
            if(ALGORITHM.equalsIgnoreCase("AES")){
            	keyGen.init(128);
            }
            
            if(ALGORITHM.equalsIgnoreCase("Blowfish")){
            	keyGen.init(128);
            }
            
            Key key = keyGen.generateKey();
            return key;
        }
    come vedi è a 128...
    attenzione.. se vuoi andare oltre i 128 devi farti una piccola routine che va a sostituire i file di policy presenti nella jre con dei file "template" che hai opportunatamente scaricato e inserito nel programma..
    i file da scaricare si trovano sul web e sono dei file di policy senza limiti sulla key..
    senza quelli, per legge, in alcuni paesi non si può crittografare con key superiori a 128 (mi pare)
    se provi senza cambiare le policy ti viene restituito un errore
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #13
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    casomai potresti provare ad aggiungere dei byte fittizi nel tuo array di byte fino ad arrivare a 128..
    una logica del tipo

    se tuoArray.size < 128
    crea nuovo array di 128 con tutti caratteri " "
    copia gli elementi che avevi dal vecchio al nuovo sostituendoli dall'elemento 0 in su
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  4. #14
    Ho gia detto 1000 volte che la chiave la decido io in modo che sia uguale sia per il client che per il server. Se io cifro con una chiave "my key" in AS3 ottenendo il mio testo cifrato, non posso lato server (cioè Java) decifrare il mio testo cifrato con una chiave generata attraverso il KeyGenerator. Anche perchè la chiave che andrò a generare sarà sicuramente diversa dalla mia "my key"!!

    La domanda è: se io invento una chiave che sia una stringa formata da 16 caratteri (cioè 128bits in tutto), come faccio a far diventare questa stringa la mia key? Senza nessun metodo di mezzo come keygenerator, secretkeyspec o altro che non so che cosa fanno alla mia stringa (o array di byte a seconda del metodo).

  5. #15
    Infatti quello è ciò che avevo in mente. Una chiave che se non è lunga abbastanza la porto io a 128. Ma il problema resta sempre quello: il metodo di crypto si aspettano un oggetto key e non un array di byte, quindi nuovamente chiedo come posso da un array di byte (o stringa) passare ad un oggetto key?

  6. #16
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    key è l'oggetto generato in automatico dal key generator
    se tu hai già la chiave devi usare una SecretKeySpec

    codice:
    SecretKeySpec privateKey = new SecretKeySpec(privateKeyBytes, ALGORITHM);
    ma il privateKeyBytes deve essere di 128 bytes.. nel tuo codice non lo fai..
    ovviamente credo, non ne ho certezza ma provare non ti costa nulla..
    io non ho dovuto creare una chiave ma solo decryptare, per cui non ho avuto problemi di questo tipo..
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  7. #17
    Come vedi questo è l'esempio che sto facendo basandomi sui due metodi che mi hai passato. La stringa cryptText = "ZQeUG/fd0nsExLrdbwYZMg==" è la codifica base64 che ottengo dalla cifratura in AS3 del testo "ciao a tutti" usando la chiave "4b8fdd91f44a7a4e762bb3f3b85e5838"

    codice:
    import javax.crypto.*;
    import javax.crypto.spec.*;
    
    import java.lang.Object;
    import java.security.Key;
    import java.security.KeyFactory;
    import sun.misc.BASE64Encoder;
    import sun.misc.BASE64Decoder;
    
    
    public class prova2 
    {
    	/**
         * Decrypt BASE64 encoded text using private key
         * @param text The encrypted text, encoded as BASE64
         * @param key The private key
         * @return The unencrypted text encoded as UTF8
         * @throws java.lang.Exception
         */
        public static String decrypt(String text, Key key) throws Exception
        {
            String result;
            try
            {
                // decrypt the text using the private key
            	BASE64Decoder decoder = new BASE64Decoder();
                byte[] dectyptedText = decrypt(decoder.decodeBuffer(text),key);
                result = new String(dectyptedText, "UTF8");
                System.out.println("Decrypted text is: " + result);
            }
            catch (Exception e)
            {
            	e.printStackTrace();
                throw e;
            }
            return result;
        }
    
        public static byte[] decrypt(byte[] text, Key key) throws Exception
        {
            byte[] dectyptedText = null;
            try
            {
                // decrypt the text using the private key
            	Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
                System.out.println("Start decryption");
                cipher.init(Cipher.DECRYPT_MODE, key);
                dectyptedText = cipher.doFinal(text);
            }
            catch (Exception e)
            {
            	e.printStackTrace();
                throw e;
            }
            return dectyptedText;
        }
    
    	public static void main(String[] args) throws Exception
    	{
    		String keyStr = "4b8fdd91f44a7a4e762bb3f3b85e5838";
    		SecretKeySpec keySpec = new SecretKeySpec(keyStr.getBytes(), "AES");
    		String cryptText = "ZQeUG/fd0nsExLrdbwYZMg==";
    		String output = decrypt(cryptText, keySpec);
    		System.out.println("OUT: " + output);
    	}
    }
    So che siamo nello spazio del forum dedicato a Java ma vorrei postarvi anche il codice AS3 che effettua la cifratura

    codice:
    var type:String='aes-128-ecb';
    var key:ByteArray;
     
        function init():void
        {
        	key = Hex.toArray('4b8fdd91f44a7a4e762bb3f3b85e5838'; 
    		trace("----------: " + encrypt('ciao a tutti'));
        }
     
        function encrypt(txt:String):String
        {
    		var cleartextBytes:ByteArray = new ByteArray();
     		cleartextBytes.writeUTF(txt);
    		var pad:IPad = Crypto.getPad("pkcs5");
                             var cipher:ICipher = Crypto.getCipher(type, key, pad);
                              cipher.encrypt(cleartextBytes);
                              return Base64.encodeByteArray(cleartextBytes);
        }
    Intanto ti ringrazio per i tentativi di aiuto sinora fornitomi. Ciao

  8. #18
    Scusa ma non capisco la frase con cui chiudi il tuo ultimo post.
    Anch'io mi devo limitare solamente a decryptare però la chiave la devi creare ugualmente!!!

    codice:
    cipher.init(Cipher.DECRYPT_MODE, key));
    Vedi ... ! Come secondo parametro devo passargli un oggetto key e non un byte[]!!!
    Non capisco che cosa intendi ???????????????????

  9. #19
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    Originariamente inviato da marcofava
    Scusa ma non capisco la frase con cui chiudi il tuo ultimo post.
    Anch'io mi devo limitare solamente a decryptare però la chiave la devi creare ugualmente!!!

    codice:
    cipher.init(Cipher.DECRYPT_MODE, key));
    Vedi ... ! Come secondo parametro devo passargli un oggetto key e non un byte[]!!!
    Non capisco che cosa intendi ???????????????????
    intendevo che da quanto mi pare di capire tu hai una stringa da utilizzare come key..
    invece io non usavo una stringa fissa.. la key la creavo random

    semplicemente con la classe KeyGenerator gli dicevo la dimensione e mi veniva restituito un oggetto Key della lunghezza giusta (come in un esempio di codice che ti ho postato in precedenza)
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  10. #20
    Ma allora ciò significa che, a differenza di quanto mi hai fatto capire prima, tu sei si informato su come fare un decrypt in Java ma non sai assolutamente come ottenere interoperabilità tra una funzione di AES-encrypt in AS3 e una funzione di AES-decrypt in Java..!!!!!!!!!!!!????

    Nella mia situazione non ha senso usare il keygenerator perchè ribadisco che encrypt e decrypt vengono fatte su sistemi diversi ciascuno dei quali basato su linguaggi diversi.

    Io ti chiedo nuovamente e onestamente lo faccio per non far perdere tempo ne a me ne a te: se le cose le sai ben venga, dammi una mano che ti ringrazio. Ma se non le sai lascia perdere. Sei stato molto gentile ma non ho tempo da perdere.

    Cerco chi è in grado di aiutarmi. Parlavi di codice aziendale...? ma se il tuo codice finisce con la pura conoscenza di un decrypt in Java allora ero capace pure io.
    Nei primi post mi rispondi così:

    "chiaro chiarissimo.. è roba che conosco..
    ho già fatto tutto quanto ma ovviamente non ti posso postare il codice..
    postami il tuo e ti dico dove sbagli (se riesco)"

    Cos'è che avevi già fatto tutto quanto? Se hai un esempio di AS3 e Java che sono interoperabili perchè non me li passi e fine? E poi se davvero avessi fatto qualcosa la questione del keygenerator, come ho già spiegato, nemmeno doveva essere introdotta.

    Grazie comunque.

    Nessun altro può aiutarmi?????????????

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 © 2026 vBulletin Solutions, Inc. All rights reserved.