2017-01-25 14 views
0

Я кодирую в Android Studio, и я пытаюсь создать кодировку base64 и sha512 hashed String.Передача кодированной в Base64 строки в функцию sha512 дает отличный результат, чем при жестком кодировании

функции являются:

private String getBase64(String data){ 

    try{ 

     byte[] enc = data.getBytes("UTF-8"); 
     return Base64.encodeToString(enc, Base64.DEFAULT); 

    }catch (Exception e){ 
     e.printStackTrace(); 
     return null; 
    } 

} 

private String getSHA(String data){ 

    try { 

     MessageDigest mda = MessageDigest.getInstance("SHA-512"); 
     byte[] digesta = mda.digest(data.getBytes("UTF-8")); 

     return convertByteToHex(digesta); 

    }catch(Exception e){ 
     e.printStackTrace(); 
     return null; 
    } 
} 


public String convertByteToHex(byte data[]) { 
    StringBuilder hexData = new StringBuilder(); 
    for (byte aData : data) 
     hexData.append(String.format("%02x", aData)); 
    return hexData.toString(); 
} 

Тогда называя их:

// line below prints VGVzdDox as it should 
    Log.d("GO", "Working Base64: " + getBase64("Test:1")); 

     // line below prints: 3553AF9EDC389314B0F7354B51FEA7EB089C039EA77A0FD7BD61798A8DD14B1292B353B9E00789B2698B072AF5B05417DDDAA1870ADF9E1DE9C1F96D9465DF56 
    // as it should 
    Log.d("GO", "Working SHA: " + getSHA("VGVzdDox")); 


    String b = getBase64("Test:1"); 

    // line below prints VGVzdDox again, as it should 
    Log.d("Base64", b); 

    String s = getSHA(b); 

    // Now this line prints a7d1bdc5d6497d787b35ce52774365150a2e21084958ffc14570367f3764b938fc1191d06006f1908084518c9697cbff3f2830a1ac003ef8ace36a0667dce92d 
    // Not sure why? 
    Log.d("SHA", s); 

Так что последний выход неправильно. Однако getBase64 является правильным и getSHA также при жестком кодировании строчной кодировки base64. И я понятия не имею, почему. Это всего лишь основное действие, другой код не выполняется.

ответ

0

Нашел, пришлось изменить:

return Base64.encodeToString(enc, Base64.DEFAULT); 

в

return Base64.encodeToString(enc, Base64.NO_WRAP); 
1

похоже ваша строка

b 

имеют новую строку в конце, я проверил его с онлайн-генератор sha 512 со строкой:

"VGVzdDox" и

"VGVzdDox

"

выход первого является:

3553AF9EDC389314B0F7354B51FEA7EB089C039EA77A0FD7BD61798A8DD14B1292B353B9E00789B2698B072AF5B05417DDDAA1870ADF9E1DE9C1F96D9465DF56 

из положить в секунду:

A7D1BDC5D6497D787B35CE52774365150A2E21084958FFC14570367F3764B938FC1191D06006F1908084518C9697CBFF3F2830A1AC003EF8ACE36A0667DCE92D 

так избавиться от разделителя строк, возможно, с помощью метода Stirng.trim(), но я не тестировал i t

+0

Я так думаю. Я получил его для вывода в одной строке, используя флаг Base64.NO_WRAP в функции кодирования. – Jeroen