zoukankan      html  css  js  c++  java
  • Android设备唯一性判断

    前段时间项目需要一个功能,就是在操作完某一个逻辑之后返回给客户一个红包,安全校验团队需要我们提供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. }  
  • 相关阅读:
    loj2042 「CQOI2016」不同的最小割
    loj2035 「SDOI2016」征途
    luogu2120 [ZJOI2007]仓库建设
    luogu3195 [HNOI2008]玩具装箱TOY
    51nod 1069 Nim游戏 + BZOJ 1022: [SHOI2008]小约翰的游戏John(Nim游戏和Anti-Nim游戏)
    HDU 5723 Abandoned country(最小生成树+边两边点数)
    BZOJ 1497: [NOI2006]最大获利(最大权闭合图)
    51nod 1615 跳跃的杰克
    SPOJ 839 Optimal Marks(最小割的应用)
    UVa 11107 生命的形式(不小于k个字符串中的最长子串)
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298193.html
Copyright © 2011-2022 走看看