// string 轉 base64
function EncodeB64(str) {
return window.btoa(unescape(encodeURIComponent(str)));
}
// 還原base64 string
function DecodeB64(str) {
return decodeURIComponent(escape(window.atob(str)));
}
//Xor 加密
function XorEncrypt(data, salt) {
data = EncodeB64(data);
var salts = Array.from(salt);
var output = [];
for (var i = 0; i < data.length; i++) {
var charCode = data.charCodeAt(i) ^ salts[i % salts.length].charCodeAt(0);
output.push(String.fromCharCode(charCode));
}
var result = output.join("");
return EncodeB64(result);
}
//Xor 解密
function XorDecrypt(data, salt) {
data = DecodeB64(data);
var salts = Array.from(salt);
var output = [];
for (var i = 0; i < data.length; i++) {
var charCode = data.charCodeAt(i) ^ salts[i % salts.length].charCodeAt(0);
output.push(String.fromCharCode(charCode));
}
var res = output.join("");
return DecodeB64(res);
}
C# :
private static string EncodeBase64(string str)
{
return System.Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
}
private static string DecodeBase64(string str)
{
return Encoding.UTF8.GetString(Convert.FromBase64String(str));
}
///
/// XOR 解密
///
/// 欲解密資料
/// salt
///
private static string XorDecrypt(string data, string salt)
{
data = DecodeBase64(data);
var salts = salt.ToCharArray();
char[] output = new char[data.Length];
for (int i = 0; i < data.Length; i++)
{
output[i] = (char)(data[i] ^ salts[i % salts.Length]);
}
var res = new string(output);
return DecodeBase64(res);
}
///
/// XOR 加密
///
/// 欲加密資料
/// salt
///
private static string XorEncrypt(string data, string salt)
{
data = EncodeBase64(data);
var salts = salt.ToCharArray();
char[] output = new char[data.Length];
for (int i = 0; i < data.Length; i++)
{
output[i] = (char)(data[i] ^ salts[i % salts.Length]);
}
return EncodeBase64(new string(output));
}
使用案例1 - 我用 javascript 加密,使用 C# 這邊解密
var encString = @"OiQ7PjUpTSw1XUYvPREADh4iXFE=";
Console.WriteLine(XorDecrypt(encString, "iamsalt"));
//HELLODONMA許
var salt = 'iamsalt';
var encrypted = XorEncrypt("HELLODONMA許", salt);
console.log(encrypted);
//OiQ7PjUpTSw1XUYvPREADh4iXFE=
使用案例2 - 使用 C# 加密,javascript 解密
var test = "許當麻麻麻DONMA";
Console.WriteLine(XorEncrypt(test, "iamsalt"));
//XyoEC1RZI1tXDwJWWhYYVlsREFsmLFgiJzQpSQ==
var salt = 'iamsalt';
var decrypted = XorDecrypt("XyoEC1RZI1tXDwJWWhYYVlsREFsmLFgiJzQpSQ==", salt);
console.log(decrypted);
//許當麻麻麻DONMA