http://www.androidpub.com/index.php?mid=devfree&document_srl=1980312
질문게시판에 쓸지 여기에쓸지 고민해보다가 여기에 씁니다^^;
위 글을 구체적으로 코드로 구현해 보았는데요,
imei등의 디바이스 아이디를 토대로
새로운 휴대폰의 유니크한 아이디를 생성해내는 메소드입니다.
아래와 같은 코드, return되어지는 결과물을 이용해서 return값 제작에 쓰인 IMEI와 SimSerial값을 알아낼 방법.. 없겠죠^^?
public String getUniqueIdOfDevice()
{
/*
* [메소드의목적]
* 1. IMEI, SimSerial등의 디바이스의 고유번호를 소스로해서 디바이스를 식별할 고유 아이디를 생성
* 2. 결과적으로 생성된 고유 아이디를가지고 원래의 IMEI, SimSerial값으로의 복호화 불가능해야함.
*/
TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
String id, tmDevice, tmSerial, androidId, deviceId;
//솔트키 (이것은 있어도, 없어도 그만으로 생각하고있습니다.)
String saltCode="abcdefg";
//IMEI, SimSerial, androidId의 획득
tmDevice =""+tm.getDeviceId();
tmSerial =""+tm.getSimSerialNumber();
androidId =""+android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
deviceId = deviceUuid.toString();
//솔트키를 포함시켜서 획득한 디바이스 고유번호들을 md5로 해쉬화하여 이어붙임.
id="";
id+=saltCode;
id+=makeMD5(deviceId)+"";
id+=makeMD5(tmDevice)+"";
id+=makeMD5(tmSerial)+"";
id+=makeMD5(androidId)+"";
//마지막으로 다시한번 해쉬화.
id=makeMD5(id);
//만들어진 고유키 반환.
return id;
}
public static String makeMD5(String param) {
StringBuffer md5 = new StringBuffer();
try {
byte[] digest = java.security.MessageDigest.getInstance("MD5").digest(param.getBytes());
for (int i = 0; i < digest.length; i++) {
md5.append(Integer.toString((digest[i] & 0xf0) >> 4, 16));
md5.append(Integer.toString(digest[i] & 0x0f, 16));
}
} catch(java.security.NoSuchAlgorithmException ne) {
ne.printStackTrace();
}
return md5.toString();
}
http://developer.android.com/reference/java/util/UUID.html#randomUUID()
이것으로 대체될수 있지 않을까요?