怎么认证安卓设备唯一性?
答案:5 悬赏:40 手机版
解决时间 2021-01-31 08:19
- 提问者网友:書生途
- 2021-01-30 18:37
怎么认证安卓设备唯一性?
最佳答案
- 五星知识达人网友:琴狂剑也妄
- 2021-01-30 20:14
目前业内最有效的方式是利用数字联盟的可信ID。数盟提供该产品及配套 ,在移动APP推广过程中,为每台激活该APP的移动设备生成一个唯一的ID,统一管理,相当于是认证了该设备的身份。如果该安卓设备是改码手机或者开小号,可信ID能够鉴别,而虚拟机、模拟器之类则可以100%查杀。
全部回答
- 1楼网友:过活
- 2021-01-30 23:12
前段时间项目需要一个功能,就是在操作完某一个逻辑之后返回给客户一个红包,安全校验团队需要我们提供android设备的唯一标示,起初直接通过获取设备的imei号传给了server端,后台公司云迹监控发现,有些设备的imei号是0000000000000000,这样失去了设备唯一性验证的功能,第二个版本做了一个修复,除了获取imei号之外还新增了AndrdoiId的处理,不过悲剧的是android 设备实在是太多太杂了,仅仅通过这两个维度去确定设备的唯一性还是有一些漏洞的,最终我们的解决方案是尽量多的获取与设备相关的信息,最后做一个MD5数字加签,基本满足了这个需求
[java] view plaincopy
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();
}
}
- 2楼网友:风格不统一
- 2021-01-30 22:25
数盟模块的探针程序,不依赖操作系统反馈的方式,独立获取设备信息,不受任何劫持程序的影响保证设备信息的准确有效。
- 3楼网友:傲气稳了全场
- 2021-01-30 20:49
通过对海量数据的分析,数盟发现手机内特定传感器信息出现群体近似表现,并在与其他参数交叉验证,将能够快速有效的判别出造假行为。数盟特别针对近距离传感器以及运动传感器的行为进行了模型创建,并加入横向数据比对,使造假者无所遁形。
- 4楼网友:行路难
- 2021-01-30 20:41
通过imei来判定,是国际移动设备标识的缩写,imei由15位数字组成。
imei是手机的唯一识别号码。我们从这个缩写的全称中来分析它的含义:
“移动设备”就是手机,不包括便携式电脑。
“国际”这个字眼也表明了它可辨识的范围是全球,即全球范围内imei不会重复。
“身份”表明了它的作用,是辨识不同的手机;一机一号,类似于人的身份证号。
“码”字又说明它是一串编号,常称为手机的“串号”、“电子串号”。
手机在生产时,就被赋予一个imei。
手机的imei,就如同公民身份证号,一部手机对应一个全球唯一的15位身份串号,将逐渐成为识别手机归属和性质的权威标志。
如果手机丢失,通过运营商将该手机的imei列入黑名单,该手机将被禁止使用,这样丢失的手机就不能用了。
imei数据库具有白名单和黑名单功能,录入失窃和遗失手机的国际移动设备识别码(imei),便可立马知晓手机来例及归属,对于购买手机(尤其是购买二手手机)的消费者提供查询参考,为避免购买来例不明的手机遭受财产损失。同时,电信运营商对于数据库黑名单中的手机,拒绝提供入网服务,如将数据库黑名单提交到全球移动通信系统协会的imei数据库,可更有效防止跨境批量销售非法取得被盗手机的发生。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯