解析Android數(shù)據(jù)加密之異或加密算法
前言:
這幾天被公司臨時(shí)拉到去做Android IM即時(shí)通信協(xié)議實(shí)現(xiàn),大致看了下他們定的協(xié)議,由于之前沒有參與,據(jù)說因服務(wù)器性能限制,只達(dá)成非明文傳遞,具體原因我不太清楚,不過這里用的加密方式是采用異或加密。這種加密方式在之前做Android加密記事本的時(shí)候采用過這種加密方式。今天已經(jīng)把客戶端心跳維持、數(shù)據(jù)包解析對接完了,總結(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)算使用場景?
- 兩個(gè)變量的互換(不借助第三個(gè)變量)
- 數(shù)據(jù)的簡單加密解密
異或加密解密實(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; }
測試加密解密
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; }
測試
byte[] bytes = encrypt("whoislcj".getBytes());//加密 String str1 = new String(decrypt(bytes));//解密
總結(jié):
位運(yùn)算可以實(shí)現(xiàn)很多高級(jí),高效的運(yùn)算。比如說加密,乘法中的n次方就是右移n位,速度還快。IM二進(jìn)制數(shù)據(jù)包采用異或算法第一能夠?qū)崿F(xiàn)加密,第二采用異或加密算法不會(huì)改變二進(jìn)制數(shù)據(jù)的長度這對二進(jìn)制數(shù)據(jù)包封包起到不小的好處。故作此總結(jié)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android:利用SharedPreferences實(shí)現(xiàn)自動(dòng)登錄
本篇文章主要介紹了Android實(shí)現(xiàn)自動(dòng)登錄,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11android 更改TextView中任意位置字體大小和顏色的方法
下面小編就為大家分享一篇android 更改TextView中任意位置字體大小和顏色的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android TextView的TextWatcher使用案例詳解
這篇文章主要介紹了Android TextView的TextWatcher使用案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08android viewpager實(shí)現(xiàn)豎屏滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了android viewpager實(shí)現(xiàn)豎屏滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07android常見手動(dòng)和自動(dòng)輪播圖效果
這篇文章主要為大家詳細(xì)介紹了android常見手動(dòng)和自動(dòng)輪播圖效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11Android學(xué)習(xí)筆記(二)App工程文件分析
之前寫過一篇關(guān)于安卓環(huán)境配置以及第一個(gè)app的制作過程,下面我們來進(jìn)一步,分析下APP工程文件2014-07-07Android實(shí)現(xiàn)游戲中的漸隱和漸現(xiàn)動(dòng)畫效果
本文給大家分享android中實(shí)現(xiàn)游戲中的漸隱漸現(xiàn)的動(dòng)畫效果,在游戲開發(fā)中經(jīng)常會(huì)遇到,對android漸隱漸現(xiàn)效果感興趣的朋友可以參考下本教程2016-09-09