JS前台base32加密,C#后台解码

JS 加密方法:

var getEncodeString = function(srcString) {
    //var srcString = 'abc';
    var BASE32CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
    var i = 0;
    var index = 0;
    var digit = 0;
    var currByte;
    var nextByte;
    var retrunString = '';

    for (var i = 0; i < srcString.length; ) {
        //var          index    = 0;   
        currByte = (srcString.charCodeAt(i) >= 0) ? srcString.charCodeAt(i)
                                : (srcString.charCodeAt(i) + 256);

        if (index > 3) {
            if ((i + 1) < srcString.length) {
                nextByte = (srcString.charCodeAt(i + 1) >= 0)
                                            ? srcString.charCodeAt(i + 1)
                                            : (srcString.charCodeAt(i + 1) + 256);
            } else {
                nextByte = 0;
            }

            digit = currByte & (0xFF >> index);
            index = (index + 5) % 8;
            digit <<= index;
            digit |= (nextByte >> (8 - index));
            i++;
        } else {
            digit = (currByte >> (8 - (index + 5))) & 0x1F;
            index = (index + 5) % 8;

            if (index == 0) {
                i++;
            }
        }

        retrunString = retrunString + BASE32CHAR.charAt(digit);
    }
    return retrunString.toLowerCase();
}

JS调用代码:

var a=getEncodeString("abc")

后台转码代码:

/// <summary>
        /// BASE32解码
        /// </summary>
        /// <param name="encodeString"></param>
        /// <returns></returns>
        private string getDecodeString(string encodeString)
        {
            int i;
            int index;
            int lookup;
            int offset;
            int digit;
            string en_string = encodeString.ToUpper();
            int[] BASE32LOOOKUP = new int[]{
               0xFF, 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, // '0', '1', '2', '3', '4', '5', '6', '7'
               0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // '8', '9', ':', ';', '<', '=', '>', '?'
               0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G'
               0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, // 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O'
               0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, // 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W'
               0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 'X', 'Y', 'Z', '[', '\', ']', '^', '_'
               0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g'
               0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, // 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'
               0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, // 'p', 'q', 'r', 's', 't', 'u', 'v', 'w'
               0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF,0xFF 
               };
            int stringLen = ((en_string.Length * 5) / 8);
            int[] bytes = new int[stringLen];
            for (var a = 0; a < stringLen; a++)
            {
                bytes[a] = 0;
            }

            for (i = 0, index = 0, offset = 0; i < en_string.Length; i++)
            {
                var charCode0 = (short)'0';
                lookup = (short)en_string[i] - charCode0;

                if ((lookup < 0) || (lookup >= BASE32LOOOKUP.Length))
                {
                    continue;
                }

                digit = BASE32LOOOKUP[lookup];

                if (digit == 0xFF)
                {
                    continue;
                }

                if (index <= 3)
                {
                    index = (index + 5) % 8;

                    if (index == 0)
                    {
                        bytes[offset] = bytes[offset] | digit;

                        offset++;

                        if (offset >= bytes.Length)
                        {
                            break;
                        }
                    }
                    else
                    {
                        bytes[offset] = bytes[offset] | (digit << (8 - index));

                    }
                }
                else
                {
                    index = (index + 5) % 8;
                    bytes[offset] = bytes[offset] | (digit >> index);

                    offset++;

                    if (offset >= bytes.Length)
                    {
                        break;
                    }

                    bytes[offset] = bytes[offset] | (digit << (8 - index));
                    if (bytes[offset] >= 256)
                    {
                        bytes[offset] %= 256;
                    }
                }
            }
            string realkeyString = "";
            for (var a = 0; a < bytes.Length; a++)
            {

                var realkey = (char)bytes[a];
                realkeyString += realkey;
            }
            return realkeyString;
        }

后台调用转码获取明文:

string pwd="";
pwd=getDecodeString(txtPwd.Text.Trim());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值