国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android數據加密之異或加密算法的實現方法

2019-12-12 05:06:15
字體:
來源:轉載
供稿:網友

這幾天被公司臨時拉到去做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數據加密之異或加密算法的實現方法全部內容了,希望大家多多支持武林網~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜章县| 新密市| 昌吉市| 宜丰县| 洪雅县| 武川县| 义马市| 长寿区| 武威市| 合水县| 沧源| 花莲县| 瓦房店市| 兰考县| 西乌| 南阳市| 罗城| 兴安县| 云安县| 元朗区| 社旗县| 阜康市| 罗源县| 聊城市| 沧源| 称多县| 双流县| 阜城县| 临城县| 凤城市| 乌审旗| 乌海市| 澄迈县| 石阡县| 务川| 柏乡县| 焉耆| 樟树市| 上饶县| 饶河县| 石棉县|