私は携帯電話を扱っており、毎日 MEID 番号を扱っています。したがって、MEID (長さ 14 の 16 進数) から疑似 ESN (長さ 8 の 16 進数) 計算機をオンラインで検索する代わりに、独自のプログラムを作成できると考えました。MEID から pESN を取得する方法は、理論的にはかなり単純です。たとえば、MEID 0xA0000000002329 の場合、pESN を作成するには、MEID に SHA-1 を適用する必要があります。A0000000002329 の SHA-1 は、e3be267a2cd5c861f3c7ea4224df829a3551f1ab を提供します。この結果の最後の 6 つの 16 進数を取得し、それを 0x80 に追加します。結果は 0x8051F1AB です。
今ここに私がこれまでに持っているコードがあります:
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());
}
問題は、この方法を使用すると、A0000000002329 の SHA-1 が e3be267a2cd5c861f3c7ea4224df829a3551f1ab の代わりに a89b611b421f57705bd013297ce3fc835f706ab0 を与えることです。ここで何が間違っていますか??
誰かが私にヒントをくれました。「コツは、MEID を表す文字列ではなく、MEID を表す数値に SHA-1 を適用することです。バイト単位で処理する必要があるため、2 つの 16 進数を指定する必要があります。一度に (2 つの 16 進数で 1 バイトを構成するため)、それらが ASCII 文字ではなく数値として解釈されることを確認してください。" . これが正しい場合、文字列を 16 進数に変更してからバイトに変更し、SHA1 が正しい結果を返すにはどうすればよいですか?