我搜索瞭如何散列設備標識符,並且偶然發現了下面的代碼。SHA-1哈希如何在Android上的Java上工作
我真的不明白它在做什麼。
- 爲什麼我需要urlEncode設備ID?
- 爲什麼我需要散列的字節,我不能只是做一個字符串?
- 爲什麼我需要將其轉換爲BigInteger?
- 爲什麼我需要移位來獲得帶有哈希ID的字符串?
任何人都可以解釋一行一行怎麼回事?我希望這可以幫助其他人理解這個在博客和論壇中傳播的片段。
String hashedId = "";
String deviceId = urlEncode(Secure.getString(context.getContentResolver(), Secure.ANDROID_ID));
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
byte bytes[] = digest.digest(deviceId.getBytes());
BigInteger b = new BigInteger(1, bytes);
hashedId = String.format("%0" + (bytes.length << 1) + "x", b);
} catch (NoSuchAlgorithmException e) {
//ignored
}
return hashedId;
什麼你還不明白關於所使用的散列技術? –
我不明白你爲什麼需要urlEncode android id。我不明白關於MessageDigest的部分。那是什麼?我可以通過任何字符串嗎?爲什麼不消化字符串?爲什麼它必須消化字符串字節?爲什麼我會得到一個字節數組? BigInteger的部分是什麼?位移?爲什麼這需要發生。 –
這是一個非常明確的問題,但我無法自己回答,要麼是因爲我不知道爲什麼每行都按照原樣寫。我自己盲目地使用了這段代碼,卻沒有真正理解每一行的功能。 – user5243421