您的位置:首页 > Web前端 > JavaScript

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

2014-01-23 12:47 323 查看
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());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: