Jasypt encryption - удаляйте слеш при шифровании - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я использую jasypt в качестве инструмента шифрования, проблема в том, что когда слово зашифровано, оно выдает '/', я хочу избежать косых черт в моих шифрах.причина в том, что я использую его в своем URL.

, поэтому, например, jasypt создает этот зашифрованный текст:

String encryptedText = "/O0sJjPUFgRGfND1TpHrkbyCalgY/rSpE8nhJ/wYjYY=";

Я добавлю это в моей ссылке ..

пример этого:

String.format("%s%s", "youtube.com/videos/", encryptedText);

это перенаправит меня на другую ссылку, поэтому вместо перехода в раздел видео он перейдет на / O0sJjPUFgRGfND1TpHrkbyCalgY

вот мой код:

public class EncryptionUtil {
    public static final String ENCRYPTION_KEY = "test-encryption";
    private static final String EMPTY_KEY_OR_TEXT = "Decryption key and text must not be empty.";

    public static String decrypt(final String encryptedText) {
        if (StringUtils.isAnyBlank(encryptedText)) {
            throw new ApiErrorException(EMPTY_KEY_OR_TEXT);
        }
        try {
            final char[] keyCharArray = ENCRYPTION_KEY.toCharArray();
            final BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
            textEncryptor.setPasswordCharArray(keyCharArray);

            return textEncryptor.decrypt(encryptedText);
        } catch (EncryptionOperationNotPossibleException e) {
            throw new ApiErrorException(e.getMessage());
        }
    }

    public static String encrypt(final String plaintext) {
        if (StringUtils.isAnyBlank(plaintext)) {
            throw new ApiErrorException(EMPTY_KEY_OR_TEXT);
        }
        final char[] keyCharArray = ENCRYPTION_KEY.toCharArray();
        final BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        textEncryptor.setPasswordCharArray(keyCharArray);

        return textEncryptor.encrypt(plaintext);
    }
}

вот мой контроллер пружины:

@GetMapping("/profile/client-users/{userId}")
    public ModelAndView getAccountAccess(
        @PathVariable String userId, ModelMap modelMap) {
        userId = EncryptionUtil.decrypt(userId);
}

1 Ответ

0 голосов
/ 11 октября 2018

Первый (плохой) подход заключается в том, чтобы разрешить символ косой черты в URL, как показано в потоке ниже

Кодированная косая черта (% 2F) с параметром пути Spring RequestMapping дает HTTP 400

Но я думаю, что кодирование вашего зашифрованного текста с использованием base64 кажется менее извращенным способом.И кодировка base64 действительно подходит для этой

Кодировка Base64 может быть полезна, когда в среде HTTP используется довольно длинная идентифицирующая информация.Например, структура сохранения базы данных для объектов Java может использовать кодировку Base64 для кодирования относительно большого уникального идентификатора (обычно 128-битных UUID) в строку для использования в качестве параметра HTTP в формах HTTP или URL-адресах HTTP GET

Цитируется из: https://en.wikipedia.org/wiki/Base64

Кодируйте зашифрованный текст следующим образом:

String encryptedText = "/O0sJjPUFgRGfND1TpHrkbyCalgY/rSpE8nhJ/wYjYY=";
String encryptedTextAndEncoded = new String(java.util.Base64.getEncoder().encode(encryptedText.getBytes()));

try {
        // Using standard Base64 in URL requires encoding of '+', '/' and '=' 
        encryptedTextAndEncoded = URLEncoder.encode(encryptedTextAndEncoded, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

String.format("%s%s", "youtube.com/videos/", encryptedTextAndEncoded);

Полученный URL будет:

youtube.com/videos/L08wc0pqUFVGZ1JHZk5EMVRwSHJrYnlDYWxnWS9yU3BFOG5oSi93WWpZWT0%3D

совершенно правильный URL

Затем, на стороне сервера, вы будете декодировать строку перед ее использованием:

@GetMapping("/profile/client-users/{userId}")
    public ModelAndView getAccountAccess(
        @PathVariable String userId, ModelMap modelMap) {
        String decoded = new String(java.util.Base64.getDecoder().decode(userId.getBytes()));
        userId = EncryptionUtil.decrypt(decoded);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...