我正在使用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);
}
}
答案 0 :(得分:5)
以下是文档的链接:http://www.jasypt.org/faq.html#i-keep-on-receiving-encryption-operation-not-possible
答案 1 :(得分:2)
@biniam_Ethiopia
我会评论你的答案,但我没有足够的声誉,所以我写下自己的答案:
我有一个非常类似的问题,但在我的情况下,这是因为更改了加密算法( PBEWithMD5AndTripleDES ),而db中的条目之前保存了不同的( PBEWithMD5AndDES )。 所以我也得到了一个EncryptionOperationNotPossibleException,因为上面有@Nathan Feger的评论而没有信息。
我希望有一天也可以帮助某人;)
答案 2 :(得分:1)
我遇到了类似的问题。 对我来说,这是因为它试图解密一个无法使用解密机制解密的密码。
因此,在解密方法尝试解密之前,我加密了密码并将其存储在数据库中。
我希望它有所帮助。