加密ArcGIS离线地图及其在Android上的达成
发布时间:2021-12-15 11:54:11 所属栏目:PHP教程 来源:互联网
导读:加密ArcGIS离线地图的思路 目前,使用Compact格式的切片文件是离线地图的一个很好的方案,但是,如果我们可能会希望限制离线地图不被第三方程序使用;或者,希望限制离线地图只被经过授权的设备使用。在这样的需求下,我们必须保护好部署在智能设备上的离线地
加密ArcGIS离线地图的思路 目前,使用Compact格式的切片文件是离线地图的一个很好的方案,但是,如果我们可能会希望限制离线地图不被第三方程序使用;或者,希望限制离线地图只被经过授权的设备使用。在这样的需求下,我们必须保护好部署在智能设备上的离线地图数据,因此,需要对离线地图数据进行加密。 在这里,我使用了这样的一个思路,其中包含以下主要环节: 1. 经授权的设备序号+保密的标识符再经过MD5生成校验值。 2. MD5校验值与加密的离线数据一起分发,由于第三方程序无法得知保密的标识符,因此无法生成正确的校验值。 3. 离线数据的加密通过加密索引文件实现,加密通过字节交换实现,这样可以基本不影响性能。 4. 读取加密文件的算法封装在动态连接库中,确保第三方无法通过反编译手段获得算法。 下面详细叙述各个环节的实现。 设备唯一身份的确认 设备的唯一序号可能在不同种类的系统上都有不同获取的方法,通过CPU序号、IMEI编号、MAC地址等多种途径的组合可以生成每个设备都不同的标识符,比如在Android中,可以以IMEI和IMSI的组合生成一个序号: TelephonyManager tm = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); String imei = tm.getDeviceId(); String imsi = tm.getSubscriberId(); deviceId = String.format("%s-%s", imei, imsi); 比如我这里得到一个设备标识“000000000000000-310260000000000”,下面根据不同情况,对上述的设备标识附加一个保密的标识符,再计算其MD5校验值: String id = String.format("%s-%s", deviceId, "wuyf_qwert"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] bytes = md.digest(id.getBytes()); result = StringUtil.bytesToHexString(bytes); 这里的“wuyf_qwert”就是自己定义的保密标识符,这个保密标识符只有数据的发布者才知道,因此第三方无法通过设备标识符自行生成校验值。最后,可以将校验值保存在一个以设备序号命名的文件中,和数据一起发布(多个设备使用多个校验文件,增加删除都很方便)。 ![]() (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |