Android數(shù)據(jù)加密之異或加密算法的實(shí)現(xiàn)方法
這幾天被公司臨時(shí)拉到去做Android IM即時(shí)通信協(xié)議實(shí)現(xiàn),大致看了下他們定的協(xié)議,由于之前沒有參與,據(jù)說因服務(wù)器性能限制,只達(dá)成非明文傳遞,具體原因我不太清楚,不過這里用的加密方式是采用異或加密。這種加密方式在之前做Android加密記事本的時(shí)候采用過這種加密方式。今天已經(jīng)把客戶端心跳維持、數(shù)據(jù)包解析對接完了,總結(jié)一下這種加密方式。
什么是異或加密?
異或運(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)算使用場景?
兩個(gè)變量的互換(不借助第三個(gè)變量)
數(shù)據(jù)的簡單加密解密
異或加密解密實(shí)現(xiàn)?
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的方式
加密實(shí)現(xiàn)
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;
}
解密實(shí)現(xiàn)
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));//解密
總結(jié):
位運(yùn)算可以實(shí)現(xiàn)很多高級,高效的運(yùn)算。比如說加密,乘法中的n次方就是右移n位,速度還快。IM二進(jìn)制數(shù)據(jù)包采用異或算法第一能夠?qū)崿F(xiàn)加密,第二采用異或加密算法不會改變二進(jìn)制數(shù)據(jù)的長度這對二進(jìn)制數(shù)據(jù)包封包起到不小的好處。故作此總結(jié)。
以上就是小編為大家?guī)淼腁ndroid數(shù)據(jù)加密之異或加密算法的實(shí)現(xiàn)方法全部內(nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
Android自定義View實(shí)現(xiàn)相機(jī)對焦框
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)相機(jī)對焦框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android自定義控件實(shí)現(xiàn)帶文本與數(shù)字的圓形進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)帶文本與數(shù)字的圓形進(jìn)度條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Kotlin協(xié)程launch啟動(dòng)流程原理詳解
這篇文章主要為大家介紹了Kotlin協(xié)程launch啟動(dòng)流程原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
利用adt-bundle輕松搭建Android開發(fā)環(huán)境與Hello world(Linux)
這篇文章主要介紹了利用adt-bundle在Linux下輕松搭建Android開發(fā)環(huán)境與Hello world,感興趣的小伙伴們可以參考一下2016-07-07
Android實(shí)現(xiàn)底部對話框BottomDialog彈出實(shí)例代碼
本篇文章主要介紹了Android實(shí)現(xiàn)底部對話框BottomDialog代碼。這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-03-03

