解析Android數(shù)據(jù)加密之異或加密算法
前言:
這幾天被公司臨時(shí)拉到去做Android IM即時(shí)通信協(xié)議實(shí)現(xiàn),大致看了下他們定的協(xié)議,由于之前沒(méi)有參與,據(jù)說(shuō)因服務(wù)器性能限制,只達(dá)成非明文傳遞,具體原因我不太清楚,不過(guò)這里用的加密方式是采用異或加密。這種加密方式在之前做Android加密記事本的時(shí)候采用過(guò)這種加密方式。今天已經(jīng)把客戶端心跳維持、數(shù)據(jù)包解析對(duì)接完了,總結(jié)一下這種加密方式。
其他幾種加密方式:
- Android數(shù)據(jù)加密之Rsa加密
- Android數(shù)據(jù)加密之Aes加密
- Android數(shù)據(jù)加密之Des加密
- Android數(shù)據(jù)加密之MD5加密
- Android數(shù)據(jù)加密之Base64編碼算法
什么是異或加密?
異或運(yùn)算中,如果某個(gè)字符(或數(shù)值)x 與 一個(gè)數(shù)值m 進(jìn)行異或運(yùn)算得到y(tǒng),則再用y 與 m 進(jìn)行異或運(yùn)算就可以還原為 x ,因此應(yīng)用這個(gè)原理可以實(shí)現(xiàn)數(shù)據(jù)的加密解密功能。
異或運(yùn)算使用場(chǎng)景?
- 兩個(gè)變量的互換(不借助第三個(gè)變量)
- 數(shù)據(jù)的簡(jiǎn)單加密解密
異或加密解密實(shí)現(xiàn)?
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;
}
測(cè)試加密解密
byte[] bytes = encrypt("whoislcj".getBytes());//加密
String str1 = new String(encrypt(bytes));//解密
2.不固定key的方式
加密實(shí)現(xiàn)
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;
}
解密實(shí)現(xiàn)
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;
}
測(cè)試
byte[] bytes = encrypt("whoislcj".getBytes());//加密
String str1 = new String(decrypt(bytes));//解密
總結(jié):
位運(yùn)算可以實(shí)現(xiàn)很多高級(jí),高效的運(yùn)算。比如說(shuō)加密,乘法中的n次方就是右移n位,速度還快。IM二進(jìn)制數(shù)據(jù)包采用異或算法第一能夠?qū)崿F(xiàn)加密,第二采用異或加密算法不會(huì)改變二進(jìn)制數(shù)據(jù)的長(zhǎng)度這對(duì)二進(jìn)制數(shù)據(jù)包封包起到不小的好處。故作此總結(jié)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android常用的數(shù)據(jù)加密方式代碼詳解
- Android數(shù)據(jù)加密之Base64編碼算法的簡(jiǎn)單實(shí)現(xiàn)
- Android數(shù)據(jù)加密之Rsa加密的簡(jiǎn)單實(shí)現(xiàn)
- Android10?客戶端事務(wù)管理ClientLifecycleManager源碼解析
- Android Socket實(shí)現(xiàn)多個(gè)客戶端即時(shí)通信聊天
- Android Socket實(shí)現(xiàn)多個(gè)客戶端聊天布局
- Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解
相關(guān)文章
Android仿QQ微信實(shí)時(shí)監(jiān)測(cè)網(wǎng)絡(luò)狀態(tài)
這篇文章主要為大家詳細(xì)介紹了Android仿QQ微信實(shí)時(shí)監(jiān)測(cè)網(wǎng)絡(luò)狀態(tài),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android實(shí)現(xiàn)頂部導(dǎo)航菜單左右滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)頂部導(dǎo)航菜單左右滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Android實(shí)現(xiàn)文字和圖片混排(文字環(huán)繞圖片)效果
這篇文章主要介紹了Android實(shí)現(xiàn)文字和圖片混排的方法,實(shí)例分析了文字環(huán)繞圖片效果的具體功能顯示及頁(yè)面布局實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android中庫(kù)項(xiàng)目的使用方法圖文介紹
類似開發(fā)其他Java應(yīng)用一樣,我們可以將可復(fù)用的代碼,打成一個(gè)jar包,供所有需要的項(xiàng)目使用。這樣,可以解決很大一部分代碼復(fù)用的問(wèn)題,本文將詳細(xì)介紹,需要了解的朋友可以參考下2012-12-12
基于popupWindow實(shí)現(xiàn)懸浮半透明效果
這篇文章主要為大家詳細(xì)介紹了基于popupWindow實(shí)現(xiàn)懸浮半透明效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Webview實(shí)現(xiàn)android簡(jiǎn)單的瀏覽器實(shí)例代碼
這篇文章主要介紹了Webview實(shí)現(xiàn)android簡(jiǎn)單的瀏覽器實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-02-02
Android TextView 設(shè)置字體大小的方法
這篇文章主要介紹了Android TextView 設(shè)置字體大小的方法的相關(guān)資料,需要的朋友可以參考下2016-02-02
Android實(shí)現(xiàn)輸入法彈出時(shí)把布局頂上去和登錄按鈕頂上去的解決方法
這篇文章主要介紹了Android實(shí)現(xiàn)輸入法彈出時(shí)把布局頂上去和登錄按鈕頂上去的解決方法,需要的朋友可以參考下2017-11-11

