Wie konvertiere ich eine große Zeichenfolge in Hex und dann in Byte?

Ich arbeite mit Handys und beschäftige mich täglich mit MEID-Nummern. Anstatt online nach einem MEID-Rechner (einer Hex-Zahl mit der Länge 14) und einem Pseudo-ESN-Rechner (einer Hex-Zahl mit der Länge 8) zu suchen, dachte ich, ich könnte mein eigenes Programm erstellen. Der Weg, eine pESN von MEID zu erhalten, ist theoretisch ziemlich einfach. Wenn beispielsweise die MEID 0xA0000000002329 angegeben wird, muss SHA-1 auf die MEID angewendet werden, um eine pESN zu erstellen. SHA-1 auf A0000000002329 gibt e3be267a2cd5c861f3c7ea4224df829a3551f1ab. Nehmen Sie die letzten 6 Hexadezimalzahlen dieses Ergebnisses und hängen Sie sie an 0x80 an - das Ergebnis ist 0x8051F1AB.

Hier ist der Code, den ich bisher habe:

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());
}  

Das Problem ist, dass mit dieser Methode SHA-1 auf A0000000002329 a89b611b421f57705bd013297ce3fc835f706ab0 anstelle von e3be267a2cd5c861f3c7ea4224df829a3551f1ab ergibt. Was mache ich hier falsch?

Jemand gab mir einen Hinweis darauf"Der Trick besteht darin, SHA-1 auf die Zahl anzuwenden, die die MEID darstellt, und nicht auf die Zeichenfolge, die die MEID darstellt. Sie müssen sie byteweise verarbeiten, also müssen Sie zwei Hexadezimalzahlen gleichzeitig eingeben (seit zwei Hexadezimalzahlen bilden ein Byte) und stellen sicher, dass sie als Zahlen und nicht als ASCII-Zeichen interpretiert werden. ". Wenn dies zutrifft, wie ändere ich meinen String in hex und dann in Byte, damit SHA1 mir das richtige Ergebnis liefert?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage