Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > md5 и русские буквы


Автор: Opik 11.4.2007, 10:19
Пробую хешировать строку функцией:
Код

    public static String md5(String value)
    {
         byte[] defaultBytes = value.getBytes();
         String md5string = null;
         try
         {
               MessageDigest algorithm = MessageDigest.getInstance("MD5");
               algorithm.reset();
               algorithm.update(defaultBytes);
               byte messageDigest[] = algorithm.digest();
               StringBuffer hexString = new StringBuffer();
               for (int i=0;i<messageDigest.length;i++) 
               {
                     //hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
                     if ((0xff & messageDigest[i]) < 0x10) 
                     {
                          hexString.append("0" + Integer.toHexString((0xFF & messageDigest[i])));
                     }
                     else 
                     {
                          hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
                     }
               }
               md5string = hexString.toString();
               //md5string = messageDigest.toString();
         }
         catch(NoSuchAlgorithmException nsae)
         {
         }         
         return md5string;
    }

хеш строк с русскими буквами получается корявый.... что я делаю не так? кодировка везде utf-8

Автор: LSD 11.4.2007, 10:32
Код
  public static String md5(String value)
  {
    try
    {
      MessageDigest algorithm = MessageDigest.getInstance("MD5");
      algorithm.reset();
      return HexBin.encode(algorithm.digest(value.getBytes("UTF-8")));
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
    return null;
  }

Автор: Opik 11.4.2007, 10:53
А что есть hexbin?

Автор: LSD 11.4.2007, 11:04
Ну в моем случае это com.sun.org.apache.xerces.internal.impl.dv.util.HexBin, преобразует из байтов в строку шестнадцатеричных цифр.
А вообще можешь воспользоваться DigestUtils из http://jakarta.apache.org/commons/codec/, там есть готовые функции для получения MD5 хеша.

Автор: Opik 11.4.2007, 11:10
LSD, 
вся фишка, в getBytes("UTF-8").
спасибо!
+1

Автор: Opik 11.4.2007, 11:36
Мне этот пакет не найти smile

Добавлено через 13 минут и 34 секунды
import org.apache.xerces.impl.dv.util.HexBin; - несколько иное

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)