Постоянный результат для шифрования строки в Java - PullRequest
1 голос
/ 17 марта 2012

Я хотел бы зашифровать строку (адрес электронной почты пользователя) и всегда получать одну и ту же результирующую строку. Я сохраняю адрес электронной почты пользователя в качестве имени пользователя для входа в систему, поскольку я выполняю поиск в этом поле (например, адрес электронной почты пользователя уже существует при регистрации.Или выберите пароль пользователя, где email = 'abc')

Для шифрования и дешифрования пароля я использую Jasypt, который выполняет эту работу.

Строковое шифрование, я могу зашифровать и расшифровать, но я не нашелспособ получить константу дешифрования.

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

Мне не нужно использовать Jasypt для строкового шифрования.все, что преобразует "hello@hello.com" в "@ ABC # EFG" каждый раз, когда было бы замечательно.

Я также пытался скремблировать байты строки, используя различные алгоритмы скремблирования в соответствии сдлина строки, первая буква и т. д. К сожалению, он перестает работать, когда я сохраняю зашифрованную строку в MySQL.Из того, что я понимаю, каждый байт, заканчивающийся тем, что имеет значение Unicode, которое не нравится MySQL, не сохраняется правильно (он работает нормально, когда я использую строку, присутствующую в тестовом классе, но не когда я фактически сохраняю зашифрованную строку и получаю из нееDB)

Любые идеи - ссылки на решения?

Большое спасибо заранее, Дан

Ответы [ 4 ]

2 голосов
/ 20 августа 2014

Вам нужно использовать фиксированный генератор соли.

http://www.jasypt.org/api/jasypt/1.8/org/jasypt/salt/FixedStringSaltGenerator.html

По сути, когда вы настраиваете такие вещи, как ваш алгоритм или пароль, у вас будет другой пароль, который вы генерируете и используете в генераторе солей с фиксированным содержанием. Оттуда вы будете получать тот же результат каждый раз, когда зашифруете строку.

В качестве примечания: одна и та же зашифрованная строка каждый раз, как ни странно, не приводит к поиску с учетом регистра. Поиск Миллера по зашифрованной версии «Миллера» не вернет запись. Только когда вы сохраняете данные в нижнем регистре, у вас есть шанс игнорировать чувствительность к регистру. Например, hibernate: Restrictions.eq (имя поля, значение) .ignoreCase (). Это будет сопоставлять вашу строку поиска с зашифрованной версией строки в нижнем регистре, независимо от того, какую чувствительность к регистру вы ищете.

0 голосов
/ 17 марта 2012

Почему бы просто не использовать хеш-строку MD5?Просто убедитесь, что вы преобразуете все символы алфавита в верхний или нижний регистр, так как они приведут к различному выводу.В частности, алгоритм MD5 в DigestUtils .В библиотеке кодеков Apache Commons есть и другие дайджесты, такие как SHA и т. Д.

0 голосов
/ 17 марта 2012

Если я правильно понял проблему, вы должны обратиться к методам хэширования, например, в Архитектура криптографии Java или может быть , эта тема будет полезна для вас (яЯ не видел это глубоко)

0 голосов
/ 17 марта 2012

Просто взгляните на любые методы хеширования.MD5, SHA-1, SHA-256 можно получить с помощью MessageDigest .Просто получите байты ваших исходных строк (используя getBytes("UTF-8")), и вы должны всегда иметь одинаковый результат.

...