Android设备唯一性判断
发布日期:2021-06-30 21:51:44 浏览次数:2 分类:技术文章

本文共 2274 字,大约阅读时间需要 7 分钟。

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

[java] 
  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. }  

转载地址:https://loongembedded.blog.csdn.net/article/details/49923453 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Eclipse如何生成jar包
下一篇:Eclipse搭建Android5.0应用开发环境 “ndk-build”:launchingfailed问题解决

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月08日 00时00分31秒