我四处搜索如何对设备标识符进行哈希处理,并偶然发现了以下代码。
我真的不明白它在做什么。
- 为什么我需要对设备 ID 进行 urlEncode 编码?
- 为什么我需要散列字节,我不能只在 String 上这样做吗?
- 为什么我需要将其转换为 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;