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();

    }