org.jasypt.Ausnahmen.EncryptionOperationNotPossibleException in Tomcat

Ich bin mit dem Jasypt Verschlüsselung Bibliothek zu verschlüsseln/entschlüsseln von text. Dieser code ist eingebettet in eine war-Datei und die Bereitstellung auf einem server.

Wenn lokal ausgeführt werden, und in unit-tests, die verschlüsseln/entschlüsseln Zyklus funktioniert perfekt. Ich benutze Steg auf die Anwendung zu entwickeln. Der code funktioniert perfekt in diesem server. Für einige Grund, bereitstellen von Tomcat bricht es mit folgender Ausnahme:

FYI, ich habe die starke Verschlüsselung-Bibliotheken installiert, sowohl auf meinem lokalen und server-Umgebungen und ich bin mit der neuesten version 1.6 (patch level 25).

org.jasypt.Ausnahmen.EncryptionOperationNotPossibleException

Ausnahme hat keine Botschaft.

Code ist vollständig symmetrisch. Ich klebte es hier für die Prüfung. Hier sind die relevanten bits:

Fand ich eine old Nabble-post, wo ein user hatte ein sehr ähnliches problem. Code überall funktioniert, außer im Tomcat. Keine Lösung gegeben wurde.

Alle Erkenntnisse würden die meisten geschätzt werden.

** * Update: ** Laufen im Tomcat auf meinem lokalen system, es scheint zu funktionieren. So es gibt etwas über meinen server. Auf dem server, ich verwende ein 64-bit-JVM unter Windows Server 2008. Ich bin mit einem 32-bit-JVM lokal (durch mein system ein bisschen älter). Ich Frage mich, ob das hat etwas zu tun mit der Frage.

public void initializeService() {
    binaryEncryptor = new BasicBinaryEncryptor();
    binaryEncryptor.setPassword(keyBase64);
}

@Override
public <T extends Serializable> String simpleEncrypt(T objectToEncrypt) throws EncryptionException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(objectToEncrypt);

        byte[] bytes = binaryEncryptor.encrypt(bos.toByteArray());
        return new String(Base64.encodeBase64(bytes));
    } catch (IOException e) {
        LOGGER.error("failed to encrypt String: " + e.getMessage());
        throw new EncryptionException(e.getMessage(), e);
    } catch (Exception e) {
        LOGGER.error("failed to encrypt String: " + e.getMessage());
        throw new EncryptionException(e.getMessage(), e);
    }
};

@SuppressWarnings("unchecked")
@Override
public <T> T simpleDecrypt(String objectToDecrypt) throws EncryptionException {
    try {
        byte[] bytes = Base64.decodeBase64(objectToDecrypt);
        byte[] decryptedBytes = binaryEncryptor.decrypt(bytes);

        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(decryptedBytes));
        T object = (T)ois.readObject();
        return object;
    } catch (IOException e) {
        LOGGER.error("failed to decrypt String: '" + objectToDecrypt + "', mesage = " + e.getMessage());
        throw new EncryptionException(e.getMessage(), e);
    } catch (Exception e) {
        LOGGER.error("failed to decrypt String: '" + objectToDecrypt + "', mesage = " + e.getMessage());
        throw new EncryptionException(e.getMessage(), e);
    }
}
  • Ich hätte gerne ein Bestätigung - ist es die Entschlüsselung der Fehler aufgetreten ist mit der Ausnahme? Wenn ja, haben Sie bereits ausgecheckt diese Frage bei StackOverflow ?
  • Dies ist ein genial Kommentar des docs jayst: Es soll sehr wenig Informationen (wenn vorhanden) der Fehler bewirkt, so dass die Verschlüsselung Interna offenbaren sich nicht durch Fehlermeldungen.
  • OK, ich habe das problem gelöst. Ich war putting den verschlüsselten String in der URL nach Base64encoding, dann URLencoding die Zeichenfolge. In meinem Umfeld, das funktionierte gut. Auf meinem server, wo ich front-end-Tomcat mit Apache, das hat nicht funktioniert. Ich fand die Antwort in der Jasypt FAQ. Wechselte ich von der Base64-Codierung in Hex-Codierung. Dieses fixiert es. Ich vermute, dass Apache verändert haben könnte, die raw-query-string vor der übergabe an Tomcat.
InformationsquelleAutor Erik | 2011-05-25
Schreibe einen Kommentar