java - Tomcat 中的 org.jasypt.exceptions.EncryptionOperationNotPossibleException

标签 java tomcat jasypt

我正在使用 Jasypt 加密库来加密/解密一些文本。此代码嵌入到 WAR 文件中并部署到服务器。

在本地运行时,在单元测试中,加密/解密循环工作得很好。我使用 Jetty 来开发应用程序。该代码在该服务器中完美运行。出于某种原因,部署到 Tomcat 会中断它,但出现以下异常:

仅供引用,我在本地和服务器环境中都安装了强大的加密库,并且我使用的是最新的 1.6 版本(补丁级别 25)。

org.jasypt.exceptions.EncryptionOperationNotPossibleException

异常没有消息。

代码是完全对称的。我把它贴在这里进行检查。以下是相关位:

我找到一个 old Nabble post用户遇到非常相似的问题。除了在 Tomcat 内部,代码在任何地方都有效。没有给出解决方案。

如有任何见解,我们将不胜感激。

**更新:** 在本地系统上的 Tomcat 中运行,它似乎可以正常工作。所以我的服务器有些问题。在服务器上,我在 Windows Server 2008 上使用 64 位 JVM。我在本地使用 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);
    }
}

最佳答案

这是文档的链接:http://www.jasypt.org/faq.html#i-keep-on-receiving-encryption-operation-not-possible

  • 加解密配置是否相同
  • 检查以确保表格列足够大
  • Base64 编码和 urlencoding 可能会冲突,所以必须恰到好处。

关于java - Tomcat 中的 org.jasypt.exceptions.EncryptionOperationNotPossibleException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6119172/

相关文章:

java - Camel 上下文未在 hello world 应用程序中启动

apache - 在 java.library.path 上找不到基于 APR 的 Apache Tomcat Native 库?

java - 无法将 Drools 6.x Workbench 部署到 Windows 中的 tomcat - 没有使用 uniqueName 'jdbc/jbpm' 注册的资源

spring-boot - 无法使用 jasypt 和 spring boot 解密错误

java - Jasypt 停止维护了吗?使用 Spring Boot 进行加密时使用什么

java - Java 中具有有限范围的类型变量

java - 如何制作不需要安装Java的Java Mac App

java - 如何在本地局域网上找到 'shutdown' 系统的 MAC 地址(可能吗?)

java - 通过web服务和java项目上传文件到postgresql db

java - 使用较新算法时 Jasypt 解密 EncryptionOperationNotPossibleException