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端,后台公司云迹监控发现...
  • yaya_soft
  • yaya_soft
  • 2015年09月17日 19:20
  • 2681

Android 如何获取唯一性ID实践

import android.content.ContentResolver; import android.content.Context; import android.net.wifi.Scan...
  • agoodcoolman
  • agoodcoolman
  • 2016年12月19日 17:53
  • 517

设备的唯一标识

英文原文:In iOS 7 and later, if you ask for the MAC address of an iOS device, the system returns the v...
  • u011011341
  • u011011341
  • 2013年10月11日 15:30
  • 1415

判断当前设备是PC Android或者iOS

var userAgentInfo = navigator.userAgent; var isAndroid = userAgentInfo.indexOf('Android') > -1 || us...
  • qq_33008701
  • qq_33008701
  • 2017年02月16日 15:43
  • 609

极光推送的设备唯一性标识 RegistrationID

对于 App 云平台系统,如何唯一地识别移动设备是非常重要的。否则,每次用户在设备上卸载掉应用再重新安装,后端系统只能把这个用户当作一个全新的用户了。 Android 上识别设备的唯一性,因为这...
  • HoLee_BK
  • HoLee_BK
  • 2017年04月18日 18:41
  • 366

用户唯一性的校验

用户唯一性的校验,要确定用户校验的时机。要在用户添加或者修改完之后,立刻发送ajax请求,校验。 用户校验分两种情况,一种是新添加用户,直接判断是否存在该用户名即可。               ...
  • lm709409753
  • lm709409753
  • 2016年03月31日 20:42
  • 2462

java 后台验证数据唯一性

/** * 判断唯一 */ @ResponseBody @RequestMapping(params = "method=isExist2") public AjaxMsg isExis...
  • zhx624
  • zhx624
  • 2012年09月08日 10:14
  • 6556

android判断设备是否有相机

本文简单介绍了判断android设备相机存在性的方法!
  • chadeltu
  • chadeltu
  • 2015年03月14日 10:43
  • 1886

Bluetooth-->蓝牙开发扫描设备,及蓝牙设备类型

请先阅读: http://blog.csdn.net/angcyo/article/details/520358941:AndroidManifest.xml注册蓝牙扫描广播注意蓝牙的权限. ...
  • angcyo
  • angcyo
  • 2016年07月27日 20:42
  • 4153

HashSet判断唯一性的步骤

HashSet 判断唯一性的不是两个步骤而是三个步骤 1.HashCode() 2.== 3.equals() 前面的比较会短路后面的比较 ; 也就是说 1 &&( 2||3) 底层是由Map存储数据...
  • followMyInclinations
  • followMyInclinations
  • 2015年09月06日 14:21
  • 1292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android设备唯一性判断
举报原因:
原因补充:

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