/**
* 异或加密工具类
* <p>
* 位运算可以实现很多高级,高效的运算。
* 可用于 IM 二进制数据包加密,第一能够实现加密,第二采用异或加密算法不会改变二进制数据的长度这对二进制数据包封包起到不小的好处
* 也可用于记事本等场景
* <p>
* 参考链接:http://www.cnblogs.com/whoislcj/p/5944917.html
*/
public final class XorUtil {
private XorUtil() {
throw new UnsupportedOperationException("cannot be instantiated");
}
/**
* 固定 key 的方式加密
* <p>
* 这种方式加密解密 算法一样
* <p>
* 加密:byte[] bytes = encryptAsFix("liyi".getBytes());
* 解密:String str = new String(encryptAsFix(bytes));
*
* @param bytes 待加密数据
* @return 加密后的数据
*/
public static byte[] encryptAsFix(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;
}
/**
* 非固定 key 的方式加密
*
* @param bytes 待加密数据
* @return 加密后的数据
*/
public static 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;
}
/**
* 解密
*
* @param bytes 待解密数据
* @return 解密后的数据
*/
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;
}
}
异或加密工具
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 文章来源:http://www.cnblogs.com/whoislcj/p/5944917.html前言:这几天...
- import java.io.*; public class Helloworld { public static...