Я пытаюсь создать программу, которая позволит мне преобразовать MEID (шестнадцатеричное число длиной 14) в псевдоESN (шестнадцатеричное число длиной 8). Способ получения pESN от MEID теоретически довольно прост. Например, при наличии MEID 0xA0000000002329 для создания pESN необходимо применить SHA-1 к MEID. SHA-1 на A0000000002329 дает e3be267a2cd5c861f3c7ea4224df829a3551f1ab. Возьмите последние 6 шестнадцатеричных чисел этого результата и добавьте их к 0x80 — результат будет 0x8051F1AB.
Теперь вот код, который у меня есть до сих пор:
public void sha1() throws NoSuchAlgorithmException {
String hexMEID = "A0000000002329";
MessageDigest mDigest = MessageDigest.getInstance("SHA1");
byte[] b = new BigInteger(hexMEID,16).toByteArray();
byte[] result = mDigest.digest(b);
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());
}
Проблема в том, что при использовании этого метода SHA-1 на A0000000002329 дает 6ad447f040941bf43c0693d2b391c6c79fa58320 вместо e3be267a2cd5c861f3c7ea4224df829a3551f1ab. Что я здесь делаю не так??
Кто-то подсказал мне, что
Хитрость заключается в том, чтобы применить SHA-1 к числу, представляющему MEID, а не к строке, представляющей MEID. Вам нужно будет обрабатывать его побайтно, поэтому вы должны дать ему два шестнадцатеричных числа за раз (поскольку два шестнадцатеричных числа составляют байт) и убедиться, что они интерпретируются как числа, а не символы ASCII сильный>.
Если эти инструкции верны, то как мне применить SHA-1 к моему шестнадцатеричному числу байт за байтом??