編輯:關於Android編程
這幾天被公司臨時拉到去做Android IM即時通信協議實現,大致看了下他們定的協議,由於之前沒有參與,據說因服務器性能限制,只達成非明文傳遞,具體原因我不太清楚,不過這裡用的加密方式是采用異或加密。這種加密方式在之前做Android加密記事本的時候采用過這種加密方式。今天已經把客戶端心跳維持、數據包解析對接完了,總結一下這種加密方式。
什麼是異或加密?
異或運算中,如果某個字符(或數值)x 與 一個數值m 進行異或運算得到y,則再用y 與 m 進行異或運算就可以還原為 x ,因此應用這個原理可以實現數據的加密解密功能。
異或運算使用場景?
兩個變量的互換(不借助第三個變量)
數據的簡單加密解密
異或加密解密實現?
1.固定key的方式
public byte[] encrypt(byte[] bytes) { int len = bytes.length; int key = 0x12; for (int i = 0; i < len; i++) { bytes[i] ^= key; } return bytes; }
測試加密解密
byte[] bytes = encrypt("whoislcj".getBytes());//加密 String str1 = new String(encrypt(bytes));//解密
2.不固定key的方式
加密實現
public byte[] encrypt(byte[] bytes) { int len = bytes.length; int key = 0x12; for (int i = 0; i < len; i++) { bytes[i] = (byte) (bytes[i] ^ key); key = bytes[i]; } return bytes; }
解密實現
public byte[] decrypt(byte[] bytes) { int len = bytes.length; int key = 0x12; for (int i = len - 1; i > 0; i--) { bytes[i] = (byte) (bytes[i] ^ bytes[i - 1]); } bytes[0] = (byte) (bytes[0] ^ key); return bytes; }
測試
byte[] bytes = encrypt("whoislcj".getBytes());//加密 String str1 = new String(decrypt(bytes));//解密
總結:
位運算可以實現很多高級,高效的運算。比如說加密,乘法中的n次方就是右移n位,速度還快。IM二進制數據包采用異或算法第一能夠實現加密,第二采用異或加密算法不會改變二進制數據的長度這對二進制數據包封包起到不小的好處。故作此總結。
以上就是小編為大家帶來的Android數據加密之異或加密算法的實現方法全部內容了,希望大家多多支持本站~
Android是基於Java的,所以也分主線程,子線程!主線程:實現業務邏輯、UI繪制更新、各子線程串連,類似於將軍;子線程:完成耗時(聯網取數據、SD卡數據加載、後台長
對話框 Dialog什麼是對話框對話框是在當前的頁面之上彈出的小窗口, 用於顯示一些重要的提示信息, 提示用戶的輸入,確認信息,或顯示某種狀態.如 : 顯示進度條對話框,
無論是ADT還是Android Studio 開發工具都需要下載JDK.網址http:www.oracle.com/index.html. 安裝完成後,進入計算機→屬性
一、效果:我們看到很多軟件的通訊錄在右側都有一個字母索引功能,像微信,小米通訊錄,QQ,還有美團選擇地區等等。這裡我截了一張美團選擇城市的圖片來看看;我們今天就來實現圖片