Jak przekonwertować duży ciąg znaków na szesnastkowy, a następnie na bajt?

Pracuję z telefonami komórkowymi i codziennie zajmuję się numerami MEID. Więc zamiast wyszukiwać w Internecie MEID (szesnastkowy numer długości 14) do kalkulatora pseudo ESN (numer szesnastkowy długości 8), pomyślałem, że mogę zrobić własny program. Sposób uzyskania pESN z MEID jest w teorii dość prosty. Na przykład, podając MEID 0xA0000000002329, aby utworzyć pESN, SHA-1 należy zastosować do MEID. SHA-1 na A0000000002329 daje e3be267a2cd5c861f3c7ea4224df829a3551f1ab. Weź 6 ostatnich liczb szesnastkowych tego wyniku i dołącz go do 0x80 - wynikiem jest 0x8051F1AB.

Oto kod, który mam do tej pory:

public void sha1() throws NoSuchAlgorithmException {

    String hexMEID = "A0000000002329";

    MessageDigest mDigest = MessageDigest.getInstance("SHA1");      

    byte[] result = mDigest.digest(hexMEID.getBytes());
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < result.length; i++) {
        sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
    }

    System.out.println(sb.toString());
}  

Problem polega na tym, że przy użyciu tej metody SHA-1 na A0000000002329 daje a89b611b421f57705bd013297ce3fc835f706ab0 zamiast e3be267a2cd5c861f3c7ea4224df829a3551f1ab. Co ja tu robię źle?

Ktoś dał mi to do zrozumienia„sztuczka polega na zastosowaniu SHA-1 do liczby reprezentującej MEID, a nie łańcucha reprezentującego MEID. Będziesz musiał przetworzyć go bajt po bajcie, więc musisz podać mu dwie liczby szesnastkowe naraz (od dwóch liczby szesnastkowe tworzą bajt) i upewniają się, że są interpretowane jako liczby, a nie znaki ASCII ”. Jeśli to prawda, to jak zmienić swój ciąg znaków na szesnastkowy, a następnie na bajt, aby SHA1 mógł dać mi poprawny wynik?

questionAnswers(3)

yourAnswerToTheQuestion