歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 加密ArcGIS離線地圖及其在Android上的實現

加密ArcGIS離線地圖及其在Android上的實現

日期:2017/3/1 10:17:42   编辑:Linux編程

加密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”就是自己定義的保密標識符,這個保密標識符只有數據的發布者才知道,因此第三方無法通過設備標識符自行生成校驗值。最後,可以將校驗值保存在一個以設備序號命名的文件中,和數據一起發布(多個設備使用多個校驗文件,增加刪除都很方便)。

圖 1 與數據一同部署的校驗文件

Copyright © Linux教程網 All Rights Reserved