Android设备唯一性判断

转载 2015年11月19日 09:45:36

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

  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. }  

相关文章推荐

Android设备唯一性判断

前段时间项目需要一个功能,就是在操作完某一个逻辑之后返回给客户一个红包,安全校验团队需要我们提供android设备的唯一标示,起初直接通过获取设备的imei号传给了server端,后台公司云迹监控发现...

iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性

苹果本着为用户安全考虑的初衷导致UDID和Mac地址相继阵亡,IMEI也不例外,为了设备的唯一性,一代代开发者绞尽脑汁,后来KeyChain被他们瞄上了,终于可以继续判别社别的唯一性。原理是利用UUI...

Unity设备唯一性验证(二维码扫描)

是不是被标题骗进来了,客官,来了就别走了。 对!又是这种Low的不要不要的验证方式,不知道有没有哪个大神想出来比较好的设备唯一性的验证方式,没有办法,客户是爸爸!!!! 需求篇: 先说一下客户的需...

设备唯一识别IDFA的构建与保证二次安装唯一性(ios自学笔记)

WWDC 2013已经闭幕,IOS7 Beta随即发布,界面之难看无以言表...,简直就是山寨Android。 更让IOS程序猿悲催的是,设备唯一标识的MAC Address在IOS7中也失效了。 ...

Android 如何获取唯一性ID实践

import android.content.ContentResolver; import android.content.Context; import android.net.wifi.Scan...

hdoj 4975 A simple Gaussian elimination problem. 【最大流唯一性判断】

题目:hdoj 4975 A simple Gaussian elimination problem.  这个题目跟hdoj 4888 一样,只是数据加强了一点,这个题目确实出的不好,尤其数...

PKU1679(The Unique MST)判断最小生成树的唯一性-次小生成树

/* *题目大意: *给出一个连通无向图,判断它的最小生成树是否唯一; *如果唯一,输出生成树的大小,否则输出"Not Unique!"; * *算法思想: *本题可以尝试求与最小生成树权...
  • Jarily
  • Jarily
  • 2013年05月10日 20:43
  • 3267

poj 1679 最小生成树唯一性判断(KRUSKAL)

记录结果边集   每次删除一个再进行  最小树操作 #include #include #include #include #include using namespace std; const i...

hdoj 4888 Redraw Beautiful Drawings 【最大流满流+唯一性判断】

题目:hdoj 4888 Redraw Beautiful Drawings 分类:最大流满流 , 最大流唯一性 来源:2014 Multi-University Training Cont...

判断最小生成树的唯一性

先用kruskal算法算出最小生成树,并把最小生成树的边记录下来。然后依次枚举删除边,用其他的边再次使用kruskal算法算出最小生成树。如果算出的代价和原来的相同,则不唯一,否则唯一。另外当我们删除...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android设备唯一性判断
举报原因:
原因补充:

(最多只允许输入30个字)