Android设备唯一性判断
发布日期:2021-06-30 21:51:44
浏览次数:2
分类:技术文章
本文共 2274 字,大约阅读时间需要 7 分钟。
前段时间项目需要一个功能,就是在操作完某一个逻辑之后返回给客户一个红包,安全校验团队需要我们提供android设备的唯一标示,起初直接通过获取设备的imei号传给了server端,后台公司云迹监控发现,有些设备的imei号是0000000000000000,这样失去了设备唯一性验证的功能,第二个版本做了一个修复,除了获取imei号之外还新增了AndrdoiId的处理,不过悲剧的是android 设备实在是太多太杂了,仅仅通过这两个维度去确定设备的唯一性还是有一些漏洞的,最终我们的解决方案是尽量多的获取与设备相关的信息,最后做一个MD5数字加签,基本满足了这个需求
- package com.suning.mobile.epa;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import android.content.Context;
- import android.os.Build;
- import android.provider.Settings.Secure;
- import android.telephony.TelephonyManager;
- public class DeviceFactoty {
- // buildId
- public String m_szDevIDShortMaker() {
- String m_szDevIDShort = "35";
- m_szDevIDShort += Build.BOARD.length() % 10 + Build.BRAND.length() % 10
- + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10
- + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10
- + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10
- + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10
- + Build.TAGS.length() % 10 + Build.TYPE.length() % 10
- + Build.USER.length() % 10 + "";
- return m_szDevIDShort;
- }
- public String currentDeviceMark(Context context) {
- final TelephonyManager tm = (TelephonyManager) context
- .getSystemService(Context.TELEPHONY_SERVICE);
- final String tmDevice, tmSerial, androidId;
- tmDevice = "" + tm.getDeviceId();
- tmSerial = "" + tm.getSimSerialNumber();
- androidId = ""
- + android.provider.Settings.Secure.getString(EPApp.getApp()
- .getContentResolver(), Secure.ANDROID_ID);
- String serial = "";
- if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO){
- serial = Build.SERIAL;
- }
- String m_szLongID = tmDevice + tmSerial + androidId + serial
- + m_szDevIDShortMaker();
- MessageDigest m = null;
- try {
- m = MessageDigest.getInstance("MD5");
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- }
- m.update(m_szLongID.getBytes(), 0, m_szLongID.length());
- // get md5 bytes
- byte p_md5Data[] = m.digest();
- // create a hex string
- String m_szUniqueID = new String();
- for (int i = 0; i < p_md5Data.length; i++) {
- int b = (0xFF & p_md5Data[i]);
- // if it is a single digit, make sure it have 0 in front (proper padding)
- if (b <= 0xF)
- m_szUniqueID += "0";
- // add number to string
- m_szUniqueID += Integer.toHexString(b);
- } // hex string to uppercase
- return m_szUniqueID = m_szUniqueID.toUpperCase();
- }
- }
转载地址:https://loongembedded.blog.csdn.net/article/details/49923453 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月08日 00时00分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
攻防世界web进阶区ics-05详解
2019-04-30
攻防世界web进阶区FlatScience详解
2019-04-30
攻防世界web进阶区ics-04详解
2019-04-30
攻防世界web进阶区bug详解
2019-04-30
攻防世界web进阶区ics-07详解
2019-04-30
攻防世界web进阶区unfinish详解
2019-04-30
攻防世界web进阶区i-got-id-200超详解
2019-04-30
sql注入总结学习
2019-04-30
leetcode46 全排列
2019-04-30
leetcode 122 买卖股票的最佳时机II
2019-04-30
leetcode 309 最佳买卖股票含冷冻期
2019-04-30
leetcode 714 买卖股票的最佳时机含手续费
2019-04-30
leetcode3 无重复字符的最长子串
2019-04-30
leetcode 1143. 最长公共子序列
2019-04-30
leetcode 83. 删除排序链表中的重复元素
2019-04-30
Python 之 histogram直方图
2019-04-30
Python实现决策树 Desision Tree & 可视化
2019-04-30
决策树 Decision tree
2019-04-30
nominal和ordinal & 数据处理中四种基本数据类型
2019-04-30
Grid SearchCV(网格搜索)& Python实现
2019-04-30