Выбор правильной реализации шифровальщика Jasypt для передачи зашифрованных данных по HTTP

Мое приложение манипулирует идентификаторами базы данных. Я хочу скрыть эти значения от своих пользователей.

Я ищу способ зашифровать эти идентификаторы, когда они передаются со стороны сервера на сторону клиента, и расшифровать их, когда они передаются наоборот.

К вашему сведению, незашифрованные идентификаторы представляют собой целые числа (длинные числа Java). У меня есть еще одно требование передавать зашифрованные идентификаторы через HTTP. Кроме того, зашифрованные значения не обязательно должны быть целыми числами.

В настоящее время я использую Jasypt StandardPBEBigIntegerEncryptor с паролем, но получаю:

org.jasypt.exceptions.EncryptionOperationNotPossibleException

Может ли кто-нибудь порекомендовать мне подходящую реализацию xxEncryptor из многочисленных классов Jasypt с учетом моих требований?

изменить: на самом деле я просто пытаюсь зашифровать положительный java long в другой положительный java long. Данные представляют собой идентификатор объекта JPA:

private Long id;

Затем я использую сериализатор Json (JsonSerializer<Long>), чтобы зашифровать данные, отправляемые из конечной точки REST в клиент javascript, и десериализатор Json (JsonDeserializer<Long>), чтобы расшифровать данные, которые клиент javascript отправляет в конечную точку REST.


person balteo    schedule 19.09.2015    source источник
comment
EncryptionOperationNotPossibleException — это очень общее исключение, не объясняющее проблему. возможно, предоставление минимального примера может помочь ответить на ваш вопрос.   -  person ilj    schedule 28.09.2015
comment
если вы шифруете целые числа с помощью пароля, почему вы не можете просто XOR их с байтами пароля?   -  person ilj    schedule 28.09.2015
comment
Привет. Что касается вашего первого комментария, к сожалению, в трассировке стека нет более конкретного исключения.   -  person balteo    schedule 29.09.2015
comment
Что касается вашего второго комментария, меня очень интересует решение, которое вы предлагаете. Не могли бы вы предоставить пример кода или указатели?   -  person balteo    schedule 29.09.2015
comment
конечно, разместите свой фрагмент, и я изменю его.   -  person ilj    schedule 29.09.2015
comment
Привет @ilj, я отредактировал свой пост, предоставив дополнительную информацию. Как объяснено, данные, зашифрованные/расшифрованные, представляют собой просто положительную длину Java. Спасибо за вашу помощь.   -  person balteo    schedule 29.09.2015


Ответы (2)


Во-первых, убедитесь, что вы используете настоящие BigInteger, а не Java long.

myEncryptor.encrypt(new BigInteger(myId));

Если у вас по-прежнему возникают проблемы с использованием BigInteger или вы не можете использовать их напрямую из-за сложной конфигурации объекта и т. д., вы можете преобразовать свои идентификаторы в строки и зашифровать с помощью StandardPBEStringEncryptor.

Наконец, убедитесь, что если вы передаете их в HTTP-запросах, вы не помещаете их в строку запроса GET-запроса. Jasypt будет кодировать base64, включая некоторые символы, такие как "=", которые не работают в URL-адресах. При передаче обратно они должны идти в POST или в заголовках.

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

person Richard Peterson    schedule 28.09.2015
comment
Привет Ричард, Большое спасибо за ваш ответ. К сожалению, данные попадают в строки запроса... Любая другая идея? В остальном ваша заметка очень интересна и заслуживает внимания! - person balteo; 29.09.2015

person    schedule
comment
Большой! Большое спасибо. Могу я попросить вас об одной последней маленькой услуге? Не могли бы вы кратко объяснить криптографическую часть вашего кода? Особенно: что делает цикл for с точки зрения криптографии? Как насчет второй строки цикла шифрования/дешифрования? - person balteo; 29.09.2015