Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160

    Problema criptazione/decriptazione password

    Salve,

    ho la seguente classe per la gestione della criptazione e decriptazione della password

    codice:
    package rubrica.util;
    
    // CIPHER / GENERATORS
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.KeyGenerator;
    
    // KEY SPECIFICATIONS
    import java.security.spec.KeySpec;
    import java.security.spec.AlgorithmParameterSpec;
    import javax.crypto.spec.PBEKeySpec;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.PBEParameterSpec;
    
    // EXCEPTIONS
    import java.security.InvalidAlgorithmParameterException;
    import java.security.NoSuchAlgorithmException;
    import java.security.InvalidKeyException;
    import java.security.spec.InvalidKeySpecException;
    import javax.crypto.NoSuchPaddingException;
    import javax.crypto.BadPaddingException;
    import javax.crypto.IllegalBlockSizeException;
    import java.io.UnsupportedEncodingException;
    import java.io.IOException;
    
    
    public class StringEncrypter {
    
        Cipher ecipher;
        Cipher dcipher;
    
        StringEncrypter(SecretKey key, String algorithm) {
            try {
                ecipher = Cipher.getInstance(algorithm);
                dcipher = Cipher.getInstance(algorithm);
                ecipher.init(Cipher.ENCRYPT_MODE, key);
                dcipher.init(Cipher.DECRYPT_MODE, key);
            } catch (NoSuchPaddingException e) {
                System.out.println("EXCEPTION: NoSuchPaddingException");
            } catch (NoSuchAlgorithmException e) {
                System.out.println("EXCEPTION: NoSuchAlgorithmException");
            } catch (InvalidKeyException e) {
                System.out.println("EXCEPTION: InvalidKeyException");
            }
        }
    
        public StringEncrypter(String passPhrase) {
    
            // 8-bytes Salt
            byte[] salt = {
                (byte)0xA9, (byte)0x9B, (byte)0xC8, (byte)0x32,
                (byte)0x56, (byte)0x34, (byte)0xE3, (byte)0x03
            };
    
            // Iteration count
            int iterationCount = 19;
    
            try {
    
                KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
                SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
    
                ecipher = Cipher.getInstance(key.getAlgorithm());
                dcipher = Cipher.getInstance(key.getAlgorithm());
    
                // Prepare the parameters to the cipthers
                AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
    
                ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
                dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
    
            } catch (InvalidAlgorithmParameterException e) {
                System.out.println("EXCEPTION: InvalidAlgorithmParameterException");
            } catch (InvalidKeySpecException e) {
                System.out.println("EXCEPTION: InvalidKeySpecException");
            } catch (NoSuchPaddingException e) {
                System.out.println("EXCEPTION: NoSuchPaddingException");
            } catch (NoSuchAlgorithmException e) {
                System.out.println("EXCEPTION: NoSuchAlgorithmException");
            } catch (InvalidKeyException e) {
                System.out.println("EXCEPTION: InvalidKeyException");
            }
        }
    
        public String encrypt(String str) {
            try {
                // Encode the string into bytes using utf-8
                byte[] utf8 = str.getBytes("UTF8");
    
                // Encrypt
                byte[] enc = ecipher.doFinal(utf8);
    
                // Encode bytes to base64 to get a string
                return new sun.misc.BASE64Encoder().encode(enc);
    
            } catch (BadPaddingException e) {
            } catch (IllegalBlockSizeException e) {
            } catch (UnsupportedEncodingException e) {
            } catch (IOException e) {
            }
            return null;
        }
    
    
        public String decrypt(String str) {
    
            try {
    
                // Decode base64 to get bytes
                byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
    
                // Decrypt
                byte[] utf8 = dcipher.doFinal(dec);
    
                // Decode using utf-8
                return new String(utf8, "UTF8");
    
            } catch (BadPaddingException e) {
            } catch (IllegalBlockSizeException e) {
            } catch (UnsupportedEncodingException e) {
            } catch (IOException e) {
            }
            return null;
        }
    .......
    }
    Su questa riga
    codice:
    byte[] utf8 = dcipher.doFinal(dec);
    mi lancia la seguente eccezione quando prova a decriptare la password, restituendomi quindi sempre null
    codice:
    Exception occurred in target VM: Input length must be multiple of 8 when decrypting with padded cipher 
    javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
    	at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
    	at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
    	at com.sun.crypto.provider.SunJCE_af.b(DashoA12275)
    	at com.sun.crypto.provider.PBEWithMD5AndDESCipher.engineDoFinal(DashoA12275)
    	at javax.crypto.Cipher.doFinal(DashoA12275)
    	at rubrica.util.StringEncrypter.decrypt(StringEncrypter.java:191)
    	at rubrica.manager.BaseManager.getPropertiesFile(BaseManager.java:42)
    	at rubrica.manager.ProfileManager.readProfileInfo(ProfileManager.java:116)
    	at rubrica.manager.ProfileManager.loadAvalaibleProfiles(ProfileManager.java:46)
    	at rubrica.Main$1.run(Main.java:38)
    	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

    Da cosa dipende? Come posso risolvere?

  2. #2
    Utente di HTML.it L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160
    Nessuno ha incontrato un'eccezione simile?????
    Ho cercato qualcos'altro su internet e da quello che ho capito, il problema dipende dal fatto che quando faccio
    codice:
    byte[] utf8 = str.getBytes("UTF8");
    converto una stringa in un'array di byte che però non è multiplo di 8.

    Qualcuno sa come risolvere questo problema? ovvero come convertire una stringa in un'array di byte multiplo di 8?

    Grazie,


  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Premetto di non essere un esperto di criptazione..
    Ho provato il codice che hai postato con questo main:
    codice:
    public static void main(String[] args) {
    	String str="prova";
    	StringEncrypter se=new StringEncrypter("psw");
    	String enc=se.encrypt(str);
    	System.out.println(se.decrypt(enc));
    }
    e con questo main
    codice:
    public static void main(String[] args) {
    	String str="prova";		
    	byte[] key="12345678".getBytes();
    	SecretKeySpec sk=new SecretKeySpec(key,"DES");
    	StringEncrypter se=new StringEncrypter(sk,"DES");
    	String enc=se.encrypt(str);
    	System.out.println(se.decrypt(enc));
    	}
    e sembra che la decodifica avvenga correttamente.. Forse il problema non è qui, ma nel codice che richiama StringEncrypter

  4. #4
    Utente di HTML.it L'avatar di Cool81
    Registrato dal
    Dec 2008
    Messaggi
    160
    No, infatti il problema non era lì! Dipendeva dal fatto che leggeva da un file gi esistente dove la psw non era criptata!

    Grazie, ciao!

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