2017-02-13 15 views
-4
private String getString(byte[] bytes) 
    { 
    StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < bytes.length; i++) 
    { 
     byte b = bytes[i]; 
     sb.append(0xFF & b); 
    } 
    return sb.toString(); 
    } 

    public String encrypt(String source) 
    { 
    try 
    { 
     MessageDigest md = MessageDigest.getInstance("MD5"); 
     byte[] bytes = md.digest(source.getBytes()); 
     return getString(bytes); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); } 
    return null; 
    } 

Если мой текст = «тест» Первая часть ToString()) производит значение «Шифрование $ 2 @ 6966b26b» И вторая часть, то получает, что и производит значение «91431072057033211115202222781313839180246» Но почему md5 a число, а не 31f521a06d5060d1f38159c74a1f7cf2 или что-то подобное?Что это за хеширование/шифрование?

+5

Это говорит буквально MD5 в коде ... –

+0

Числовое представление, потому что вы получаете количество байт обратно. Если вы хотите, чтобы это было представлено в шестнадцатеричном формате, например 31f521a06d5060d1f38159c74a1f7cf2, вам нужно преобразовать ваши байты в 16-базовые. поэтому значение между 00-ff. –

ответ

0

Это четко указано в коде yuou используется алгоритм хэширования MD5

Теперь ваш вопрос почему:

Но почему md5 a число, а не 31f521a06d5060d1f38159c74a1f7cf2 или что-то подобное?

Ваш ответ прост, посмотрите на код, который генерирует строку из массива байтов.

byte b = bytes[i]; 
    sb.append(0xFF & b); 

взять байт, т.е. 0x20 затем производится логическая операция с целыми 0x255 и затем добавить десятичное представление результата лет вашей StringBuilder. То, что вы хотите сделать, это больше похоже на

sb.append(Integer.toHexString(0xff&b)); 
+0

Любой способ преобразования оригинала в HexString? – NoHacksJustCoCo

0

Я бы сказал, MD5 хэш, потому что код говорит MessageDigest.getInstance("MD5"): D

+0

Но почему md5 число, а не 31f521a06d5060d1f38159c74a1f7cf2 или что-то подобное? – NoHacksJustCoCo

1

Функция "шифровать()" возвращает хэш MD5. Вы должны переименовать его в «хэш», потому что хеширование! = Шифрование. Если вы хотите зашифровать строку, вы можете посмотреть здесь: https://gist.github.com/bricef/2436364

+0

Но почему md5 число, а не 31f521a06d5060d1f38159c74a1f7cf2 или что-то подобное? – NoHacksJustCoCo

+0

Я нашел это: [MD5 Digest] (http://www.stackoverflow.com/questions/5470219/get-md5-string-from-message-digest) –