我已经编写了一个用于加密和解密URL的休息服务。
加密代码:
@GET
@Produces("application/json")
@Path("/encrypt/")
public Response encryptWithQuery(@QueryParam("plainString") String plainString)
throws JSONException {
Response response = new Response();
AesUtil util = new AesUtil(KEY_SIZE, ITERATION_COUNT);
response = util.encrypt(SALT, IV, PASSPHRASE, plainString);
return response;
}
解密代码:
@GET
@Produces("application/json")
@Path("/decryptWP/")
public Response decryptWithQuery(@QueryParam("encryptString") String encryptString)
throws JSONException {
Response response = new Response();
AesUtil util = new AesUtil(KEY_SIZE, ITERATION_COUNT);
response = util.decrypt(SALT, IV, PASSPHRASE, encryptString);
return response;
}
当我拨打加密休息服务时,我会收到加密字符串
加密网址
http://localhost:9080/kttafm/keybank/encrypt?plainString=http://localhost:9080/kttafm/master.jsp?abc=zyx
但是当我打电话给解密休息服务时,我得到了以下异常
javax.crypto.BadPaddingException: Given final block not properly padded
但如果我从@Queryparam tp @path param移动, 解密工作正常,
解密方法工作正常并解密加密字符串
@GET
@Produces("application/json")
@Path("/decrypt/{encryptString}")
public Response decrypt(@PathParam("encryptString") String encryptString)
throws JSONException {
Response response = new Response();
AesUtil util = new AesUtil(KEY_SIZE, ITERATION_COUNT);
response = util.decrypt(SALT, IV, PASSPHRASE, encryptString);
return response;
}
我缺少什么?
答案 0 :(得分:0)
请确保您始终encode客户端参数,例如使用URLEncoder.
例如,您的加密网址必须为
http://localhost:9080/kttafm/keybank/encrypt?plainString=http%3A%2F%2Flocalhost%3A9080%2Fkttafm%2Fmaster.jsp%3Fabc%3Dzyx
答案 1 :(得分:0)
鉴于加密的字符串示例:“fbSjGsyDYfmJM4rAURhgdpX + XKQr8WTfiZC7PaBqK7KzfUEYau1cpXnhECqRT47n”,我可以看到有一个“+”字符是URL解码的候选字符。 您可以使用此URL解码网站http://meyerweb.com/eric/tools/dencoder/来查看解码字符串时转换+号。
这会导致解密错误,因为您的算法不会完全符合预期。
您可以通过在解密方法中添加一些调试消息来确保这一点,如下例所示:
@GET
@Produces("application/json")
@Path("/decrypt/{encryptString}")
public Response decrypt(@PathParam("encryptString") String encryptString)
throws JSONException {
System.out.println(encryptString);
Response response = new Response();
...
}
解决方案是在调用服务之前在客户端执行URL编码。 在这种情况下,您的示例如下所示:“fbSjGsyDYfmJM4rAURhgdpX%2BXKQr8WTfiZC7PaBqK7KzfUEYau1cpXnhECqRT47n”
请注意+号的转换。