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[] 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());
}
問題は、この方法を使用すると、A0000000002329 の SHA-1 が e3be267a2cd5c861f3c7ea4224df829a3551f1ab の代わりに 6ad447f040941bf43c0693d2b391c6c79fa58320 を与えることです。ここで何が間違っていますか??
誰かがヒントをくれた
トリックは、MEID を表す文字列ではなく、MEID を表す数値に SHA-1 を適用することです。バイト単位で処理する必要があるため、一度に 2 つの 16 進数を指定し (2 つの 16 進数で 1 バイトを構成するため)、それらが ASCII 文字ではなく数値として解釈されるようにする必要があります。
これらの指示が正しい場合、SHA-1 を 16 進数にバイト単位で適用するにはどうすればよいですか??