2012-03-17 3 views
1

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

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

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

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

Мне не нужно использовать Jasypt для строкового шифрования. все, что превращает «[email protected]» в «@ ABC# EFG» каждый раз, когда будет здорово.

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

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

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

ответ

0

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

0

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

Посмотрите на библиотеку Apache Commons Codec. В частности, алгоритм MD5 в DigestUtils. Существуют также различные другие дайджесты в библиотеке Apache Commons Codec как SHA и т.д.

+0

Спасибо за ваши быстрые ответы. – Dan

+0

@ Dan - проблем нет. Просто запомните ответы на некоторые ответы и, возможно, выберите их правильно. Я вижу, что вы новичок, поэтому добро пожаловать в SO. –

0

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

+0

Я хотел бы поблагодарить всех за ваши быстрые ответы. Я не рассматривал использование хэш-значения электронной почты, потому что мне нужно расшифровать его, когда нужно отправить электронные письма. HOWEVER (!!!) Я только что понял, что могу сохранить электронное письмо в двух полях: одно с хеш-значением, которое является постоянным, а затем в другом поле, которое имеет дешифруемое значение того же письма. Большое спасибо - я новичок в форуме, поэтому я не могу опубликовать ответ на свой вопрос до 8 часов, поэтому опубликуем его здесь – Dan

2

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

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

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

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

+0

Извинения за то, что не поблагодарили вас сразу. Я только сейчас видел ваш очень полезный комментарий :) – Dan

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