2015-10-15 3 views
3

Я написал службу отдыха для шифрования и расшифровки URL.Отправка url в качестве параметра запроса в rest webservice

Код шифрования:

@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; 
} 

Когда я называю свою службу шифровать остальное я получить зашифрованную строку

URL для шифрования

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 Т.П. @path парам, дешифрования прекрасно работает,

Метод расшифровывать, который отлично работает и расшифровывает зашифрованную строку:

@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

Кстати: добавление материала для шифрования URL-адреса кажется плохой идеей с точки зрения безопасности. –

+0

@Queryparam может иметь кодировку, связанную с обработкой. Вы можете показать пример зашифрованного URL-адреса? вы отлаживали, чтобы проверить, что соответствует именно входному аргументу encryptString? –

ответ

0

Удостоверьтесь, что вы всегда encode параметр на стороне клиента, например. используя URLEncoder.

Например, ваш URL для шифрования должен быть

http://localhost:9080/kttafm/keybank/encrypt?plainString=http%3A%2F%2Flocalhost%3A9080%2Fkttafm%2Fmaster.jsp%3Fabc%3Dzyx 
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»

Примечание преобразование знака +.

Смежные вопросы