Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615

    Java Cryptography Extension

    Cari utenti,
    il mio server Tomcat è associato a jdk 1.7 e su di esso testo le mie applicazioni web sviluppate in Java con Eclipse. In condizioni normali tutto funziona. Se tento di impostare una classe di crittografia reversibile con chiave di lunghezza superiore a 128 bit, leggo un messaggio di errore nel quale mi si dice che la chiave di criptatura ha una "illegal size".

    Guardando in rete ho scoperto che di default jre accetta solo chiavi di lunghezza 128 bit, per valicare tale limite è necessario scaricare dal sito sun le java cryptography extension sostituendo i jar ivi ubicati con i corrispondenti jar che si trovano in jre/lib/security come prescritto nel file che si può scaricare al termine della pagina http://www.oracle.com/technetwork/ja...ds/index.html. Tuttavia anche dopo aver compiuto tale operazione continuo a vedere l'errore di cui sopra. Come mai?

    Grazie a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    posti un po' di codice?
    che cifratura usi? che ambiente hai? Altrimenti si va ad intuito
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Innanzitutto grazie per la tua risposta, ti indico tutte le informazioni necessarie.

    1) L'errore completo è java.security.InvalidKeyException: Illegal key size or default parameters;
    2) Si verifica tentando di eseguire una routine di criptazione reversibile il cui codice indico sotto;
    3) Cercando quell'errore su Google tutte le pagine dicono lo stesso, ossia installare JCE;
    4) Io stesso con una installazione di qualche settimana fa dello stesso ambiente di sviluppo con stesso codice avevo risolto installando le Java Cryptography extensions e tutto si era risolto, forse ora ho omesso qualche passaggio.

    La prassi che già in precedenza ha funzionato era:

    Scaricare le JCE;
    Copiarle sotto JRE/lib/security;
    Riavviare;

    (cercando il testo dell'errore su Google capirete subito). Solo che stavolta non funziona. A prescindere dalla classe di criptazione e dal metodo che utilizzo (che è identica rispetto a quando tutto funzionava). Come mai? Devo aver omesso qualcosa.

    Ecco il codice
    codice:
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    		int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES/ECB/PKCS5Padding");
    		System.out.println(maxKeyLen);
    		cipher.init(Cipher.ENCRYPT_MODE, key );
    		byte[] plaintext = message.getBytes("8859_1");
    		byte[] ciphertext = cipher.doFinal(plaintext);
    Grazie a tutti!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Sicuro che hai messo le policy sotto jre/lib/security??
    Perché io ho il mio pc ben configurato e questo pezzo di codice funziona

    codice:
    	public static void main(String[] args) throws Exception {
    		String message = "ciao";
    		KeyGenerator kgen = KeyGenerator.getInstance("AES");
    		kgen.init(192); // 192 and 256 bits may not be available
    		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    		SecretKey skey = kgen.generateKey();
    		cipher.init(Cipher.ENCRYPT_MODE, skey);
    		byte[] plaintext = message.getBytes("8859_1");
    		byte[] ciphertext = cipher.doFinal(plaintext);
    		SecretKeySpec skeySpec = new SecretKeySpec(skey.getEncoded(), "AES");
    
    		cipher.init(Cipher.DECRYPT_MODE, skeySpec);
    		byte[] original = cipher.doFinal(ciphertext);
    		String originalString = new String(original);
    		System.out.println(originalString);
    		System.out.println(originalString.equals(message));
    	}
    con java 7 sia con chiavi a 256 che a 192 bit
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Le librerie si trovano esattamente dove dici tu, ma è come se non ci fossero. Infatti ho provato ad inserire questa riga per capire la massima lunghezza di chiave supportata:

    codice:
    int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES/ECB/PKCS5Padding");
    System.out.println(maxKeyLen);
    E quello che leggo dall'output è 128, segno che è ancora quella la massima lunghezza ammessa, come se non avessi sostituito alcuna libreria (è la mia idea almeno, correggimi se sbaglio).

    Forse dopo aver copiato quelle libreria (ripeto, versione per JDK 7, nella giusta collocazione) dovevo fare altro come settare permessi o qualche altra operazione?

    Grazie!

    PS sembra strano anche a me, procedendo esattamente così su un'altra macchina funzionava.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    prova a scaricarli nuovamente, cancellali fisicamente dalla lib/security e mettili.
    Mi viene da pensare che se parti da sistemi unix e hai la jre sotto /usr non hai i permessi di scrittura, stesso dicasi su seven sotto C:
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    Intanto grazie per la risposta. Già provato per due volte a cancellare riscaricare e reinstallare, tutto liscio senza alcun problema di permessi. Ho Ubuntu 11.10 e la JDK è sotto una cartella Apps da me appositamente creata sotto home. Ma aspetta, dici che avrei dovuto obbligatoriamente installarla sotto usr? Potrebbe dipendere da quello? A me sembra strano...

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    uhmmm
    io ho ubuntu 10.04, per comodità mia metto la jvm in /usr/java e setto opportunamente la java home, ricordando che le copie devo farle come utente di root (sudo mkdir /usr/java e poi sudo cp tutto).

    controlla sotto la tua apps i permessi di accesso e la data di modifica dei jar
    RTFM Read That F*** Manual!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2005
    Messaggi
    615
    ??

    Come mai la mia apps? Non capisco cosa c'entri, non devo controllare la JRE sotto la JDK, che si trovano fuori dall'applicazione? E poi come mai permessi di accesso e data modifica dei jar?

    Perdonami ma non riesco a capire. I jar sono quelli giusti, se parliamo di JCE (spulciando nel pacchetto leggo nei file testuali che si tratta di una versione priva di limitazioni), riguardo tutto il resto poi se funzionava tutto bene prima di questa modifica immagino che altri fattori esterni siano tutti settati correttamente...

    Scusa la mia ignoranza ma se non mi aiuti tu ho paura che non risolverò mai questo problema... Ossia, quale può essere un0anomalia tale da far funzionare bene qualsiasi applicazione Java (quindi percorsi permessi ecc tutto ok) ma da non far funzionare correttamente le JCE?

    Grazie ancora.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    se non hai i permessi di scrittura su quella cartella (o meglio sulla cartella in cui c'è la jre/lib/security) non puoi copiare i jar, ergo ti trovi i jar con le policy ristrette.
    Se fai una copia inoltre si aggiorna l'istante di copia, quindi mentre quello della jre è della data di installazione, quei due file dopo la copia dovrebbero avere data di oggi.

    mettiti nella cartella in jre/lib/security e fai

    ls -lrt
    RTFM Read That F*** Manual!!!

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.