js代码(错误写法):
/**
* 异或加密,解密
* @param {byte[]} data
*
*/
export function Xor(data){
let tmpc =0;
var key ="123456abcd";
var klen=key.length;
for (var i = 0; i < data.length; ++i){
tmpc = (data[i] ^ key.charAt(i % klen));
if (tmpc != 0){
data[i] = tmpc;
}
}
return data;
}
这里出现一个问题,js 异或运算时,不会把字符( key.charAt(i % klen))转成二进制进行运算,需要我们手动处理,把字符串转字符,添加一个方法:
/**
* 字符串转字符(char)
*/
export function stringToChars (_s){
_s = _s.replace(/(^\s*)|(\s*$)/g, "");
var _r = "";
for(var i=0;i<_s.length;i++){
_r += i==0 ? _s.charCodeAt(i) : "|" + _s.charCodeAt(i);
}
return _r;
}
js(正确写法)
/**
* 异或加密,解密
* @param {byte[]} data
*/
export function Xor(data){
let tmpc =0;
var key ="123456abcd";
var klen=key.length;
for (var i = 0; i < data.length; ++i){
tmpc = (data[i] ^stringToChars(key.charAt(i % klen)));
if (tmpc != 0){
data[i] = tmpc;
}
}
return data;
}
Java 代码:
public static byte[] xor(byte[] data){
String key="123456abcd";
int klen=key.length();
byte tmpc =0;
for (int i = 0; i < data.length; ++i){
tmpc = (byte) (data[i] ^ key.charAt(i % klen));
if (tmpc != 0){
data[i] = tmpc;
}
}
return data;
}