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

  1. package com.suning.mobile.epa;
  2. import java.security.MessageDigest;
  3. import java.security.NoSuchAlgorithmException;
  4. import android.content.Context;
  5. import android.os.Build;
  6. import android.provider.Settings.Secure;
  7. import android.telephony.TelephonyManager;
  8. public class DeviceFactoty {
  9. // buildId
  10. public String m_szDevIDShortMaker() {
  11. String m_szDevIDShort = "35";
  12. m_szDevIDShort += Build.BOARD.length() % 10 + Build.BRAND.length() % 10
  13. + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10
  14. + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10
  15. + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10
  16. + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10
  17. + Build.TAGS.length() % 10 + Build.TYPE.length() % 10
  18. + Build.USER.length() % 10 + "";
  19. return m_szDevIDShort;
  20. }
  21. public String currentDeviceMark(Context context) {
  22. final TelephonyManager tm = (TelephonyManager) context
  23. .getSystemService(Context.TELEPHONY_SERVICE);
  24. final String tmDevice, tmSerial, androidId;
  25. tmDevice = "" + tm.getDeviceId();
  26. tmSerial = "" + tm.getSimSerialNumber();
  27. androidId = ""
  28. + android.provider.Settings.Secure.getString(EPApp.getApp()
  29. .getContentResolver(), Secure.ANDROID_ID);
  30. String serial = "";
  31. if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO){
  32. serial = Build.SERIAL;
  33. }
  34. String m_szLongID = tmDevice + tmSerial + androidId + serial
  35. + m_szDevIDShortMaker();
  36. MessageDigest m = null;
  37. try {
  38. m = MessageDigest.getInstance("MD5");
  39. } catch (NoSuchAlgorithmException e) {
  40. e.printStackTrace();
  41. }
  42. m.update(m_szLongID.getBytes(), 0, m_szLongID.length());
  43. // get md5 bytes
  44. byte p_md5Data[] = m.digest();
  45. // create a hex string
  46. String m_szUniqueID = new String();
  47. for (int i = 0; i < p_md5Data.length; i++) {
  48. int b = (0xFF & p_md5Data[i]);
  49. // if it is a single digit, make sure it have 0 in front (proper padding)
  50. if (b <= 0xF)
  51. m_szUniqueID += "0";
  52. // add number to string
  53. m_szUniqueID += Integer.toHexString(b);
  54. } // hex string to uppercase
  55. return m_szUniqueID = m_szUniqueID.toUpperCase();
  56. }
  57. }

Android设备唯一性判断的更多相关文章

  1. 在Android设备上判断设备是否支持摄像头

    private boolean hasCamera(){ boolean hasCamera=false; PackageManager pm=getActivity().getPackageMana ...

  2. Android判断当前的android设备是否处于联网状态

    首先,要想获得当前android设备是否处于联网状态,那么android本身给我们提供了一个服务 private ConnectivityManager connectivityManager;//用 ...

  3. 稳定获取Android设备唯一码(UUID)的解决方案

    最近做的一个项目中需要用到Android设备唯一码(UUID)来标识一台设备, Android中设备唯一码有很多,如:MAC地址.IMEI号(DeviceId).IMSI号.ANDROID_ID.序列 ...

  4. Android 网络连接判断与处理

    Android网络连接判断与处理  获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="and ...

  5. Android设备唯一码的获取

    Android设备唯一码的获取 UTDID是集团无线设备统一ID方案,目的是给每一台设备一个ID,作为唯一标识.UTDID由客户端生成,并在设备中各个客户端之间共享.UTDID的生成中包含时间戳和随机 ...

  6. 获取Android设备唯一标识码

    概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于Android系统版本.厂商定制系统中的Bug等限制,稳定性和唯一 ...

  7. bat如何实现多台android设备同时安装多个apk

    背景:在做预置资源(安装apk)时,有多台android设备需要做相同的资源(如:10台,安装10个apk).一台一台去预置的话(当然也可以每人一台去预置),耗时较长有重复性. 问题:如何去实现多台同 ...

  8. bat如何创建多级文件夹(在android设备中)

    在android设备中要创建多个或者多级文件夹时,手动去创建费时费力(有点傻),一个bat文件就能很好的实现这个功能. 1.首先创建同级多个文件夹且在该文件夹下生成一个文件 @echo off ech ...

  9. Android设备一对多录屏直播--(UDP组播连接,Tcp传输)

    原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...

随机推荐

  1. linux系统的时间调整

    以centos为例,其它系统应该是一样或者类似的. 需要用到两个命令: date 和 hwclock 其中 date 命令由 coreutils 这个包提供, hwclock 命令由 util-lin ...

  2. 五、Java基础---------if else、switch总结

    在前几篇博客中主要是以笔者遇到的一些典型的题目为例子而展开的讨论,接下来几篇将是以知识点的结构进行讲述.本文主要是讲述if ()else .if() else if().switch() case 的 ...

  3. ASP.NET MVC5 新特性:Attribute路由使用详解 (转载)

    1.什么是Attribute路由?怎么样启用Attribute路由? 微软在 ASP.NET MVC5 中引入了一种新型路由:Attribute路由,顾名思义,Attribute路由是通过Attrib ...

  4. (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)

    /* * POJ_1591_2.cpp * * Created on: 2013年10月31日 * Author: Administrator */ #include <iostream> ...

  5. linux设备驱动归纳总结(三):6.poll和sellct【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-61749.html linux设备驱动归纳总结(三):6.poll和sellct xxxxxxxxxx ...

  6. Linux的视频编程(V4L2编程)【转】

    本文转载自:http://blog.csdn.net/tommy_wxie/article/details/11472073 一.什么是video4linuxVideo4linux2(简称V4L2), ...

  7. ubuntu屏幕分辨率问题

    今天在ubuntu下工作时突然屏幕上下各出现了一个大概2厘米的黑条,感觉屏幕被横向拉长了,莫名其妙,开始以为简单的调整下分辨率就好了,在系统设置显示里面发现分辨率只有两个可选参数,并且对象为未知,由于 ...

  8. linux,Mac下lu 一把

    习惯Terminal没有不知道ls命令的(等同于DOS的dir),经常只是需要查看目录的内容大小,但ls -h显示的只是目录的本身大小,而且很多项内容 ls 在这方面的两个诟病出现了: 小诟1. 显示 ...

  9. Android消息处理机制(Handler 与Message)---01

    一.handler的使用场景为么会有handler?(部分内容图片摘自http://www.runoob.com/w3cnote/android-tutorial-handler-message.ht ...

  10. (转载)CSV 文件处理 PERL

    http://cn.perlmaven.com/how-to-read-a-csv-file-using-perl http://search.cpan.org/~hmbrand/Text-CSV_X ...