-
-
[求助]这个貌似base32解码的算法是什么?逆算法又是什么?
-
发表于:
2013-5-19 21:43
7018
-
[求助]这个貌似base32解码的算法是什么?逆算法又是什么?
base32是32个可见字符,而这里却是34个: "123456789abcdefghijklmnpqrstuvwxyz"。看算法有点象base32解码过程,是不是自定义的算法?奇怪的是如果取5个bit位则是32编码呀,34个字符必然突破5个bit位吧,搞不懂了,其逆算法编码过程又是什么呢?这里向高手求教了。
(
对不起,刚刚代码有误,现纠正了)
base34Str = "123456789abcdefghijklmnpqrstuvwxyz";
/*
* decode()将base34码串解密(结果长度=可见字符串长度 * 5 / 8)
* 参数szReg -- base34码可见字符串
* 参数Len_Of_Reg -- strlen(szReg)
* 参数outStr -- 输出串
*/
int decode(const char *szReg, int Len_Of_Reg, char *outStr)
{
int i,m,n,iMin,iLen;
char ch_1, ch_2;
char index[256] = {0};
i = 0;
while (i < Len_Of_Reg)
{
ch_3 = tolower(szReg[i]);
j = 0;
while (j < Len_Of_base34Str)
{
if (base34Str[j] == ch_3)
{
index[i] = j;
break;
}
j++;
}
i++;
}
n = 0;
i = 0;
iLen = 0;
while (i < Len_Of_Reg)
{
m = 0;
ch_2 = 0;
while (i < Len_Of_Reg)
{
ch_1 = index[i];
iMin = (8 - m) > (5 - n) ? (5 - n) : (8 - m);
if (n <= m)
ch_1 <<= m;
else
ch_1 >>= n;
ch_2 |= ch_1;
n += iMin;
m += iMin;
if (n >= 5)
{
i++;
n = 0;
}
if (m >= 8) break;
}
outStr[iLen] = ch_2;
iLen++;
}
outStr[iLen] = 0;
return iLen;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)