org.jasypt.exceptions.EncryptionOperationNotPossibleException в Tomcat - PullRequest
10 голосов
/ 25 мая 2011

Я использую библиотеку шифрования Jasypt для шифрования / дешифрования некоторого текста.Этот код встроен в файл WAR и развернут на сервере.

При локальном запуске и модульных тестах цикл шифрования / дешифрования работает отлично.Я использую Jetty для разработки приложения.Код прекрасно работает на этом сервере.По какой-то причине при развертывании в Tomcat происходит следующее исключение:

К вашему сведению, у меня установлены надежные библиотеки шифрования в локальной и серверной средах, и я использую последнюю версию 1.6 (уровень исправлений 25).

org.jasypt.exceptions.EncryptionOperationNotPossibleException

Исключение не имеет сообщения.

Код является полностью симметричным.Я вставил это здесь для экспертизы.Вот соответствующие биты:

Я нашел один старый пост Nabble , где у пользователя была очень похожая проблема.Код работал везде, кроме внутри Tomcat.Решение не было дано.

Любое понимание будет наиболее ценно.

** Обновление: ** Запуск в Tomcat в моей локальной системе, похоже, работает.Так что есть что-то о моем сервере.На сервере я использую 64-разрядную JVM в Windows Server 2008. Я использую 32-разрядную JVM локально (поскольку моя система немного старше).Интересно, это как-то связано с проблемой.

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);
    }
}

Ответы [ 3 ]

5 голосов
/ 25 мая 2011

Вот ссылка на документы: http://www.jasypt.org/faq.html#i-keep-on-receiving-encryption-operation-not-possible

  • Является ли конфигурация шифрования и дешифрования идентичной
  • Убедитесь, что столбцы таблицы достаточно большие
  • Кодировка Base64 и urlencoding могут конфликтовать, поэтому это должно быть сделано правильно.
2 голосов
/ 21 декабря 2014

@ biniam_Ethiopia
Я бы прокомментировал ваш ответ, но у меня недостаточно репутации, поэтому я пишу свой собственный ответ:

У меня была очень похожая проблема, но в моем случае это было из-за изменения алгоритма шифрования ( PBEWithMD5AndTripleDES ), в то время как записи в БД ранее сохранялись с другим ( PBEWithMD5AndDES *) 1007 *). Поэтому я также получил исключение EncryptionOperationNotPossibleException, которое не содержит информации из-за комментария @Nathan Feger выше.

Надеюсь, это тоже кому-нибудь когда-нибудь поможет;)

1 голос
/ 27 июня 2014

Я столкнулся с подобной проблемой. Для меня это было потому, что он пытался расшифровать пароль, который нельзя было расшифровать с помощью механизма дешифрования.

Следовательно, я зашифровал пароль и сохранил его в базе данных до того, как метод расшифровки попытается его расшифровать.

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...