1. 什麼是異或加密?
異或運算中,如果某個字符(或數值)x 與 一個數值m 進行異或運算得到y,則再用y 與 m 進行異或運算就可以還原爲 x ,因此應用這個原理可以實現數據的加密解密功能。
2. 異或運算使用場景?
-
兩個變量的互換(不借助第三個變量)
-
數據的簡單加密解密
3.異或加密解密實現?
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二進制數據包採用異或算法第一能夠實現加密,第二採用異或加密算法不會改變二進制數據的長度這對二進制數據包封包起到不小的好處。故作此總結。