編輯:關於Android編程
前言:
這幾天被公司臨時拉到去做Android IM即時通信協議實現,大致看了下他們定的協議,由於之前沒有參與,據說因服務器性能限制,只達成非明文傳遞,具體原因我不太清楚,不過這裡用的加密方式是采用異或加密。這種加密方式在之前做Android加密記事本的時候采用過這種加密方式。今天已經把客戶端心跳維持、數據包解析對接完了,總結一下這種加密方式。
其他幾種加密方式:
什麼是異或加密?
異或運算中,如果某個字符(或數值)x 與 一個數值m 進行異或運算得到y,則再用y 與 m 進行異或運算就可以還原為 x ,因此應用這個原理可以實現數據的加密解密功能。
異或運算使用場景?
異或加密解密實現?
1.固定key的方式
這種方式加密解密 算法一樣
public byte[] encrypt(byte[] bytes) { if (bytes == null) { return null; } 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) { if (bytes == null) { return null; } 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) { if (bytes == null) { return null; } 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二進制數據包采用異或算法第一能夠實現加密,第二采用異或加密算法不會改變二進制數據的長度這對二進制數據包封包起到不小的好處。故作此總結。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
一、需求分析“位置分享”App正如其名稱所述那樣,是一款可以分享自己地理位置的應用。“位置分享”App的功能需求大致如下:
android 向服務器端發送json數據,本文講解的知識點比較基礎,如果你是大神,請直接關閉該網頁,免得浪費你寶貴時間。 1.向服務器端發送json數據 關鍵代碼:
首先看不正常的圖,點擊tracing_dialog按鈕彈出對話框然後看理論上的效果圖觀察兩張圖發現,不正常的圖最上方被狀態欄遮擋住了,而該問題存在於android4.4版
我們在編寫Android程序的時候經常要用到許多圖片,不同圖片總是會有不同的形狀、不同的大小,但在大多數情況下,這些圖片都會大於我們程序所需要的大小。比如說系統圖片庫裡展