Как проверить, находится ли строка в закодированной форме или нет - PullRequest
0 голосов
/ 17 октября 2011

У меня есть метод внутри, я кодирую входную строку, а затем я проверяю значение с моим значением базы данных (сохраненным в закодированной форме),

public void checkString(String strPass){
String s = MD5.crypt(strPass);

code to check the string s with the data base value..

}

Мне нужен способ, чтобыпроверьте значение 'strPass', прежде чем оно передается методу, кодирующему строку. Данные для strPass могут иметь вид 1. admin 2. L4989C

Пожалуйста, помогите мне ..

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Вам нужно будет:

  1. Хешируйте строку, которую вы хотели хэшировать с помощью MD5.
  2. Представляет хэш в шестнадцатеричной строке
  3. Сделайте str1.equals(str2), чтобы увидеть, равны ли 2 хэша.
0 голосов
/ 17 октября 2011

Вот ответ на вопрос, который вы задали.

public void checkString(String strPass) {
    if (strPass.equals("admin") || strPass.equals("L4989C")) {
        // do something else
    } else {
        String s = MD5.crypt(strPass);
        // code to check the string s with the data base value.
}

Однако я думаю, что у вас может быть проблема с вашим MD5.crypt() методом.Если этот метод выполняет следующие действия:

  1. Используйте String.getBytes(...) для преобразования строки в byte[].
  2. Рассчитайте контрольную сумму MD5 байтов, предоставив вам еще одну byte[].
  3. Используйте new String(byte[], ...) для преобразования зашифрованных байтов в строку.

Проблема заключается в том, что последний шаг, скорее всего, с потерями ... и неправильный.Большинство кодировок символов имеют байты или последовательности байтов, которые не отображаются на допустимые символы.Если конструктор String встречает один из них во входном байтовом массиве, он либо отбрасывает его, либо сопоставляет его с каким-либо символом, который обозначает не отображаемый символ (например, '?').Конечным результатом является то, что контрольная сумма хранится неправильно.Чтобы справиться с этим, вы должны либо сохранить форму контрольной суммы byte[] в базе данных в виде большого двоичного объекта, либо закодировать ее в шестнадцатеричном или base64 или как угодно.


Это поможет понять вашувопрос, если вы предоставили исходный код для вашего метода MD5.crypt ... или сказали нам, из какой он библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...