Android设备唯一性判断

来源:互联网 发布:自己动手装修diy软件 编辑:程序博客网 时间:2024/05/29 12:51

前段时间项目需要一个功能,就是在操作完某一个逻辑之后返回给客户一个红包,安全校验团队需要我们提供android设备的唯一标示,起初直接通过获取设备的imei号传给了server端,后台公司云迹监控发现,有些设备的imei号是0000000000000000,这样失去了设备唯一性验证的功能,第二个版本做了一个修复,除了获取imei号之外还新增了AndrdoiId的处理,不过悲剧的是android 设备实在是太多太杂了,仅仅通过这两个维度去确定设备的唯一性还是有一些漏洞的,最终我们的解决方案是尽量多的获取与设备相关的信息,最后做一个MD5数字加签,基本满足了这个需求

[java] view plaincopy
  1. package com.suning.mobile.epa;  
  2.   
  3. import java.security.MessageDigest;  
  4. import java.security.NoSuchAlgorithmException;  
  5.   
  6. import android.content.Context;  
  7. import android.os.Build;  
  8. import android.provider.Settings.Secure;  
  9. import android.telephony.TelephonyManager;  
  10.   
  11. public class DeviceFactoty {  
  12.    
  13.   
  14.     // buildId  
  15.     public String m_szDevIDShortMaker() {  
  16.         String m_szDevIDShort = "35";  
  17.   
  18.         m_szDevIDShort += Build.BOARD.length() % 10 + Build.BRAND.length() % 10  
  19.                 + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10  
  20.                 + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10  
  21.                 + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10  
  22.                 + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10  
  23.                 + Build.TAGS.length() % 10 + Build.TYPE.length() % 10  
  24.                 + Build.USER.length() % 10 + "";  
  25.   
  26.         return m_szDevIDShort;  
  27.     }  
  28.   
  29.   
  30.   
  31.     public String currentDeviceMark(Context context) {  
  32.         final TelephonyManager tm = (TelephonyManager) context  
  33.                 .getSystemService(Context.TELEPHONY_SERVICE);  
  34.   
  35.         final String tmDevice, tmSerial, androidId;  
  36.         tmDevice = "" + tm.getDeviceId();  
  37.         tmSerial = "" + tm.getSimSerialNumber();  
  38.         androidId = ""  
  39.                 + android.provider.Settings.Secure.getString(EPApp.getApp()  
  40.                         .getContentResolver(), Secure.ANDROID_ID);  
  41.         String serial = "";  
  42.         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO){  
  43.             serial = Build.SERIAL;  
  44.         }  
  45.         String m_szLongID = tmDevice + tmSerial + androidId + serial  
  46.                 + m_szDevIDShortMaker();  
  47.         MessageDigest m = null;  
  48.         try {  
  49.             m = MessageDigest.getInstance("MD5");  
  50.         } catch (NoSuchAlgorithmException e) {  
  51.             e.printStackTrace();  
  52.         }  
  53.         m.update(m_szLongID.getBytes(), 0, m_szLongID.length());  
  54.         // get md5 bytes  
  55.         byte p_md5Data[] = m.digest();  
  56.         // create a hex string  
  57.         String m_szUniqueID = new String();  
  58.         for (int i = 0; i < p_md5Data.length; i++) {  
  59.             int b = (0xFF & p_md5Data[i]);  
  60.             // if it is a single digit, make sure it have 0 in front (proper padding)  
  61.             if (b <= 0xF)  
  62.                 m_szUniqueID += "0";  
  63.             // add number to string  
  64.             m_szUniqueID += Integer.toHexString(b);  
  65.         } // hex string to uppercase  
  66.         return m_szUniqueID = m_szUniqueID.toUpperCase();  
  67.   
  68.     }  
  69. }  
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新车尾箱坏了怎么办 放书的箱子烂了怎么办 车钥匙锁后备箱里怎么办 布的收纳箱有味怎么办 车漆清漆层掉了怎么办 副驾驶储物箱卡子断了怎么办 玛莎拉蒂车门打不开怎么办 新买的水杯漏水怎么办 泰迪小狗掉毛怎么办 手机jlc调用接口状态异常怎么办 进门和厕所对着怎么办 p过的照片有竖条怎么办 当照片p出竖条纹怎么办 月子里落下脚心怕风怕凉怎么办 鞋胶把手粘住了怎么办 凉鞋魔术贴长了怎么办 新买的狗一直叫怎么办 刚买的幼犬老叫怎么办 狗狗什么都不吃怎么办 新买的吊扇风小怎么办 夜市卖果汁没电怎么办 榻榻米太长2米45怎么办 木质桌子黏黏的怎么办 白色塑料桌子染色了怎么办 3dmax模型变透明了怎么办 刚养的兔子不吃怎么办 熊猫兔不吃下喝怎么办 熊猫兔感冒了一直打喷嚏怎么办 兔子后腿骨断了怎么办 兔子的腿肿了怎么办 仓鼠喝了牛奶该怎么办 宠物兔不吃不喝怎么办 兔子把木屑吃了怎么办? 小车司机碰瓷大车司机怎么办 在淘宝买到假的护肤品怎么办 淘宝购物发现是假的怎么办 电脑键盘灯不亮不能打字怎么办 海棠兔屁股有屎怎么办 大冒险告白被接受了怎么办剧透微博 大冒险被告白了怎么办 腐书网 大冒险告白被接受了怎么办 006