亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#和avascript加解密之間的互轉代碼分享

2020-01-24 02:47:27
字體:
來源:轉載
供稿:網友

1:Xxtea支持中文;

2:支持JS和C#加解密之間的互轉;

一:C#部分

復制代碼 代碼如下:

class XXTEA2
{
    public static string Encrypt(string source, string key)
    {
        System.Text.Encoding encoder = System.Text.Encoding.UTF8;
        //UTF8==>BASE64==>XXTEA==>BASE64
        byte[] bytData = encoder.GetBytes(base64Encode(source));
        byte[] bytKey = encoder.GetBytes(key);
        if (bytData.Length == 0)
        {
            return "";
        }
        return System.Convert.ToBase64String(ToByteArray(Encrypt(ToUInt32Array(bytData, true), ToUInt32Array(bytKey, false)), false));
    }
    public static string Decrypt(string source, string key)
    {
        if (source.Length == 0)
        {
            return "";
        }
        // reverse
        System.Text.Encoding encoder = System.Text.Encoding.UTF8;
        byte[] bytData = System.Convert.FromBase64String(source);
        byte[] bytKey = encoder.GetBytes(key);

        return base64Decode(encoder.GetString(ToByteArray(Decrypt(ToUInt32Array(bytData, false), ToUInt32Array(bytKey, false)), true)));
    }

    private static UInt32[] Encrypt(UInt32[] v, UInt32[] k)
    {
        Int32 n = v.Length - 1;
        if (n < 1)
        {
            return v;
        }
        if (k.Length < 4)
        {
            UInt32[] Key = new UInt32[4];
            k.CopyTo(Key, 0);
            k = Key;
        }
        UInt32 z = v[n], y = v[0], delta = 0x9E3779B9, sum = 0, e;
        Int32 p, q = 6 + 52 / (n + 1);
        while (q-- > 0)
        {
            sum = unchecked(sum + delta);
            e = sum >> 2 & 3;
            for (p = 0; p < n; p++)
            {
                y = v[p + 1];
                z = unchecked(v[p] += (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));
            }
            y = v[0];
            z = unchecked(v[n] += (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));
        }
        return v;
    }

    private static UInt32[] Decrypt(UInt32[] v, UInt32[] k)
    {
        Int32 n = v.Length - 1;
        if (n < 1)
        {
            return v;
        }
        if (k.Length < 4)
        {
            UInt32[] Key = new UInt32[4];
            k.CopyTo(Key, 0);
            k = Key;
        }
        UInt32 z = v[n], y = v[0], delta = 0x9E3779B9, sum, e;
        Int32 p, q = 6 + 52 / (n + 1);
        sum = unchecked((UInt32)(q * delta));
        while (sum != 0)
        {
            e = sum >> 2 & 3;
            for (p = n; p > 0; p--)
            {
                z = v[p - 1];
                y = unchecked(v[p] -= (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));
            }
            z = v[n];
            y = unchecked(v[0] -= (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));
            sum = unchecked(sum - delta);
        }
        return v;
    }

    private static UInt32[] ToUInt32Array(Byte[] Data, Boolean IncludeLength)
    {
        Int32 n = (((Data.Length & 3) == 0) ? (Data.Length >> 2) : ((Data.Length >> 2) + 1));
        UInt32[] Result;
        if (IncludeLength)
        {
            Result = new UInt32[n + 1];
            Result[n] = (UInt32)Data.Length;
        }
        else
        {
            Result = new UInt32[n];
        }
        n = Data.Length;
        for (Int32 i = 0; i < n; i++)
        {
            Result[i >> 2] |= (UInt32)Data[i] << ((i & 3) << 3);
        }
        return Result;
    }

    private static Byte[] ToByteArray(UInt32[] Data, Boolean IncludeLength)
    {
        Int32 n;
        if (IncludeLength)
        {
            n = (Int32)Data[Data.Length - 1];
        }
        else
        {
            n = Data.Length << 2;
        }
        Byte[] Result = new Byte[n];
        for (Int32 i = 0; i < n; i++)
        {
            Result[i] = (Byte)(Data[i >> 2] >> ((i & 3) << 3));
        }
        return Result;
    }

    public static string base64Decode(string data)
    {
        try
        {
            var encoder = System.Text.Encoding.UTF8;

            byte[] todecode_byte = Convert.FromBase64String(data);
            return encoder.GetString(todecode_byte);
        }
        catch (Exception e)
        {
            throw new Exception("Error in base64Decode" + e.Message);
        }
    }

    public static string base64Encode(string data)
    {
        try
        {
            byte[] encData_byte = new byte[data.Length];
            encData_byte = System.Text.Encoding.UTF8.GetBytes(data);
            string encodedData = Convert.ToBase64String(encData_byte);
            return encodedData;
        }
        catch (Exception e)
        {
            throw new Exception("Error in base64Encode" + e.Message);
        }
    }


 

二:JS部分

//***************************************************************************************
// Autor:Tecky
// var prefix = xt
//  update:
//***************************************************************************************

function Xxtea(privateKey) {
    this._keyString = privateKey;
}

//將長整形轉換為string,private
Xxtea.prototype._long2str = function (v, w) {
    var vl = v.length;
    var n = (vl - 1) << 2;
    if (w) {
        var m = v[vl - 1];
        if ((m < n - 3) || (m > n)) return null;
        n = m;
    }
    for (var i = 0; i < vl; i++) {
        v[i] = String.fromCharCode(v[i] & 0xff,
                                   v[i] >>> 8 & 0xff,
                                   v[i] >>> 16 & 0xff,
                                   v[i] >>> 24 & 0xff);
    }
    if (w) {
        return v.join('').substring(0, n);
    }
    else {
        return v.join('');
    }
}

//將string轉換為long,private
Xxtea.prototype._str2long = function (s, w) {
    var len = s.length;
    var v = [];
    for (var i = 0; i < len; i += 4) {
        v[i >> 2] = s.charCodeAt(i)
                  | s.charCodeAt(i + 1) << 8
                  | s.charCodeAt(i + 2) << 16
                  | s.charCodeAt(i + 3) << 24;
    }
    if (w) {
        v[v.length] = len;
    }
    return v;
}

//function: encrypt str with private key by xxtea
Xxtea.prototype.xxtea_encrypt = function (str) {
    if (str == "") {
        return "";
    }
    str = Base64.encode64(UtfParser.utf16to8(str));
    var v = this._str2long(str, true);
    var k = this._str2long(this._keyString, false);
    if (k.length < 4) {
        k.length = 4;
    }
    var n = v.length - 1;

    var z = v[n], y = v[0], delta = 0x9E3779B9;
    var mx, e, p, q = Math.floor(6 + 52 / (n + 1)), sum = 0;
    while (0 < q--) {
        sum = sum + delta & 0xffffffff;
        e = sum >>> 2 & 3;
        for (p = 0; p < n; p++) {
            y = v[p + 1];
            mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
            z = v[p] = v[p] + mx & 0xffffffff;
        }
        y = v[0];
        mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
        z = v[n] = v[n] + mx & 0xffffffff;
    }

    return Base64.encode64(this._long2str(v, false));
}

//function: decrypt str with private key by xxtea
Xxtea.prototype.xxtea_decrypt = function (str) {
    if (str == "") {
        return "";
    }
    str = Base64.decode64(str);
    var v = this._str2long(str, false);
    var k = this._str2long(this._keyString, false);
    if (k.length < 4) {
        k.length = 4;
    }
    var n = v.length - 1;

    var z = v[n - 1], y = v[0], delta = 0x9E3779B9;
    var mx, e, p, q = Math.floor(6 + 52 / (n + 1)), sum = q * delta & 0xffffffff;
    while (sum != 0) {
        e = sum >>> 2 & 3;
        for (p = n; p > 0; p--) {
            z = v[p - 1];
            mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
            y = v[p] = v[p] - mx & 0xffffffff;
        }
        z = v[n];
        mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);
        y = v[0] = v[0] - mx & 0xffffffff;
        sum = sum - delta & 0xffffffff;
    }

    return UtfParser.utf8to16(Base64.decode64(this._long2str(v, true)));
}

//Class:utf16 to utf8, utf8 ot utf16
//Author:Tecky
//Date:2008-06-03
function UtfParser() {
    //all method is static
}

//function:change utf16 to utf8
//parms(str):string that you want to change
UtfParser.utf16to8 = function (str) {
    var out, i, len, c;

    out = "";
    len = str.length;
    for (i = 0; i < len; i++) {
        c = str.charCodeAt(i);
        if ((c >= 0x0001) && (c <= 0x007F)) {
            out += str.charAt(i);
        }
        else if (c > 0x07FF) {
            out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
            out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
            out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
        }
        else {
            out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
            out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
        }
    }
    return out;
}

//function:change utf8 to utf16
//parms(str):string that you want to change
UtfParser.utf8to16 = function (str) {
    str = str.toString();

    var out, i, len, c;
    var char2, char3;

    out = "";
    len = str.length;
    i = 0;
    while (i < len) {
        c = str.charCodeAt(i++);
        switch (c >> 4) {
            case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
                // 0xxxxxxx
                out += str.charAt(i - 1);
                break;
            case 12: case 13:
                // 110x xxxx   10xx xxxx
                char2 = str.charCodeAt(i++);
                out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
                break;
            case 14:
                // 1110 xxxx  10xx xxxx  10xx xxxx
                char2 = str.charCodeAt(i++);
                char3 = str.charCodeAt(i++);
                out += String.fromCharCode(((c & 0x0F) << 12) |
                               ((char2 & 0x3F) << 6) |
                               ((char3 & 0x3F) << 0));
                break;
        }
    }

    return out;
}

// Class:base64 encode & decode
// Autor:Tecky
// Date:2008-06-03
function Base64() {
    //all method is static
}

//static
Base64._keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
Base64.encode64 = function (input) {
    var output = "";
    var chr1, chr2, chr3 = "";
    var enc1, enc2, enc3, enc4 = "";
    var i = 0;

    do {
        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);

        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;

        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }

        output = output +
           Base64._keyStr.charAt(enc1) +
           Base64._keyStr.charAt(enc2) +
           Base64._keyStr.charAt(enc3) +
           Base64._keyStr.charAt(enc4);
        chr1 = chr2 = chr3 = "";
        enc1 = enc2 = enc3 = enc4 = "";
    } while (i < input.length);

    return output;
}

Base64.decode64 = function (input) {
    var output = "";
    var chr1, chr2, chr3 = "";
    var enc1, enc2, enc3, enc4 = "";
    var i = 0;

    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
    var base64test = /[^A-Za-z0-9/+///=/n]/g;
    if (base64test.exec(input)) {
        alert("There were invalid base64 characters in the input text./n" +
              "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='/n" +
              "Expect errors in decoding.");
    }
    input = input.replace(/[^A-Za-z0-9/+///=]/g, "");

    do {
        enc1 = Base64._keyStr.indexOf(input.charAt(i++));
        enc2 = Base64._keyStr.indexOf(input.charAt(i++));
        enc3 = Base64._keyStr.indexOf(input.charAt(i++));
        enc4 = Base64._keyStr.indexOf(input.charAt(i++));

        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;

        output = output + String.fromCharCode(chr1);

        if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
        }

        chr1 = chr2 = chr3 = "";
        enc1 = enc2 = enc3 = enc4 = "";

    } while (i < input.length);

    return output;
}
[/code]

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲国产视频| 国内外成人免费激情在线视频网站| 欧美电影在线观看| 97精品国产97久久久久久免费| 在线看片第一页欧美| 精品国产乱码久久久久酒店| 国产精品v日韩精品| 91精品国产乱码久久久久久蜜臀| 久久久久久香蕉网| 亚洲欧美国产高清va在线播| 国产精品电影网| 国产精品成人观看视频国产奇米| 国产精品一区二区三区毛片淫片| 国精产品一区一区三区有限在线| 中文国产成人精品久久一| 欧美性xxxxxxx| 欧美在线国产精品| 欧美贵妇videos办公室| 精品福利视频导航| 欧美另类在线播放| 欧美野外wwwxxx| 日韩在线欧美在线| 国产精品爱久久久久久久| 久久久91精品国产| 欧美性色xo影院| 亚洲香蕉成人av网站在线观看| 97在线观看视频| 欧美国产视频一区二区| 成人久久一区二区三区| 国产精品wwww| 成人做爰www免费看视频网站| 在线日韩中文字幕| 午夜精品久久久久久久白皮肤| 超碰精品一区二区三区乱码| 91精品免费看| 超碰91人人草人人干| 亚洲国产精品va在线看黑人动漫| 欧美日韩免费网站| 久久这里只有精品视频首页| 久久久久日韩精品久久久男男| 91社区国产高清| 日韩av在线免费播放| 九九热最新视频//这里只有精品| 欧美精品www在线观看| 91精品久久久久久久久久久| 成人免费观看网址| 超碰日本道色综合久久综合| 国产a级全部精品| 亚洲精品www久久久| 97视频在线观看免费高清完整版在线观看| 亚洲免费人成在线视频观看| 97精品国产91久久久久久| 欧美激情国产日韩精品一区18| 九九热视频这里只有精品| 精品综合久久久久久97| 91国产一区在线| 国产免费亚洲高清| 久久久久久久999精品视频| 久久777国产线看观看精品| 538国产精品视频一区二区| 萌白酱国产一区二区| 欧美情侣性视频| 久久精品99久久久久久久久| 亚洲欧洲国产伦综合| 在线日韩欧美视频| 疯狂蹂躏欧美一区二区精品| 国产精品夜间视频香蕉| 国产成人一区二区| 狠狠久久五月精品中文字幕| 久久夜色精品国产欧美乱| 在线播放国产一区中文字幕剧情欧美| 亚洲免费一级电影| 91欧美视频网站| 色老头一区二区三区在线观看| 欧美日韩精品在线| 国产视频在线观看一区二区| 国产精品欧美激情在线播放| 欧美裸体男粗大视频在线观看| 91九色单男在线观看| 日韩欧美亚洲一二三区| 国产91在线高潮白浆在线观看| 久久综合网hezyo| 欧美韩日一区二区| 91国内揄拍国内精品对白| 欧美日韩亚洲一区二区三区| 欧美色视频日本高清在线观看| 欧美成人精品不卡视频在线观看| 久久久久久中文| 精品国产91久久久| 久久久噜噜噜久久中文字免| 少妇av一区二区三区| 69久久夜色精品国产69| 欧美成人中文字幕| 韩国三级日本三级少妇99| 日本精品在线视频| 国产成人激情小视频| 久久免费视频观看| 国产精品白丝av嫩草影院| 91精品久久久久久久| 中文字幕av一区二区三区谷原希美| 精品色蜜蜜精品视频在线观看| 91久久久久久国产精品| 欧美综合在线第二页| 欧美与黑人午夜性猛交久久久| 国产91在线播放| 欧美午夜片欧美片在线观看| 2019中文字幕在线观看| 亚洲人成77777在线观看网| 97视频免费在线看| 九九综合九九综合| 色婷婷**av毛片一区| 欧美黑人视频一区| 国产日韩精品在线| 日韩中文字幕在线精品| 国产高清在线不卡| 国内揄拍国内精品| 成人亚洲综合色就1024| 青青久久av北条麻妃黑人| 欧美xxxx14xxxxx性爽| 亚州精品天堂中文字幕| 久久久人成影片一区二区三区观看| 91精品视频专区| 亚洲国产精品va在线看黑人| 91精品成人久久| 成人情趣片在线观看免费| 亚洲第一色在线| 成人免费xxxxx在线观看| 成人精品久久久| 精品无人区乱码1区2区3区在线| 78色国产精品| 91高清免费在线观看| 大胆人体色综合| 色综合91久久精品中文字幕| 国产精品69精品一区二区三区| 成人午夜小视频| 日韩av网站导航| 91色视频在线观看| 久久精品免费电影| 亚洲性生活视频在线观看| 5566成人精品视频免费| 538国产精品一区二区在线| 日韩一区二区av| 91精品国产自产在线老师啪| 国产精品一区二区久久久久| 亚洲精品自拍第一页| 亚洲国产精品美女| 国产欧美日韩丝袜精品一区| 久久天天躁夜夜躁狠狠躁2022| 黄色精品一区二区| 精品久久久91| 国产精品日韩欧美| 成人伊人精品色xxxx视频| 国产午夜精品理论片a级探花| 亚洲国产欧美一区二区三区久久| 亚洲xxx视频| 久久久久久成人| 超碰91人人草人人干| 91久久久久久| 国产成+人+综合+亚洲欧洲| 欧美大片在线看免费观看| 另类色图亚洲色图| 亚洲偷熟乱区亚洲香蕉av| 精品无人区乱码1区2区3区在线| 中文字幕在线看视频国产欧美|