gpt4 book ai didi

java - 在 Http Request 中检索加密值后使用 jasypt 解密

转载 作者:可可西里 更新时间:2023-11-01 17:02:08 26 4
gpt4 key购买 nike

在这种情况下,我在使用 jaspyt 时遇到了问题:

StrongTextEncryptor textEncryptor = new StrongTextEncryptor();      
textEncryptor.setPassword("myPassword");
String myEncryptedParam = textEncryptor.encrypt("myClearMessage");

myObject.setCallbackUrl("http://myhost/notification?myparam="+myEncryptedParam);

当我收到回调 url 并尝试使用请求中使用的相同 STRONGTEXTEXTENCRYPTOR 解密 url 中提供的参数“myParam”时,它会引发异常:

org.jasypt.exceptions.EncryptionOperationNotPossibleException
at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.decrypt(StandardPBEByteEncryptor.java:1055)
at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.decrypt(StandardPBEStringEncryptor.java:725)
at org.jasypt.util.text.StrongTextEncryptor.decrypt(StrongTextEncryptor.java:118)
at com.softlysoftware.caligraph.util.Util.decryptMessage(Util.java:30)

在我得到的异常中进一步挖掘:

BadPaddingException: Given final block not properly padded

如果我在没有 httprequest 的情况下测试加密/解密过程,工作正常。

最佳答案

问题是 StrongTextEncryptor 使用 StandardPBEStringEncryptor,后者又使用 Base64 对密文进行编码。问题是 Base64 有一个 / 字符,它不是 URL 安全的。当您尝试解密时,您使用的参数解析器可能会丢弃那些使密文不完整的 / 字符。

最简单的解决方案可能是用全部替换来更改有问题的字符:

myEncryptedParam.replaceAll("/", "_").replaceAll("\\+", "-");

在尝试解密之前再次返回:

receivedParam.replaceAll("_", "/").replaceAll("-", "\\+");

这会将编码从普通的 Base64 编码转换为 "URL and Filename safe" Base 64 alphabet .

关于java - 在 Http Request 中检索加密值后使用 jasypt 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27363096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com