[英]Sending url as query parameter in rest webservice
我寫了一個休息服務來加密和解密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;
}
我錯過了什么?
請確保始終在客戶端編碼參數,例如使用URLEncoder。
例如,您的加密URL必須是
http://localhost:9080/kttafm/keybank/encrypt?plainString=http%3A%2F%2Flocalhost%3A9080%2Fkttafm%2Fmaster.jsp%3Fabc%3Dzyx
給定加密的字符串示例:“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”
請注意+號的轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.