Я использую библиотеку шифрования 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);
}
}