首页
社区
课程
招聘
[求助]这个貌似base32解码的算法是什么?逆算法又是什么?
发表于: 2013-5-19 21:43 7031

[求助]这个貌似base32解码的算法是什么?逆算法又是什么?

2013-5-19 21:43
7031
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;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
难道最后两字符“yz”会是摆设?
2013-5-19 22:26
0
雪    币: 225
活跃值: (218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
搞几个样本就知道了
2013-5-20 09:03
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
这是分析出来的解码过程,问题是我不知编码过程该怎么写。所以没办法搞样本验证啊
2013-5-20 14:09
0
游客
登录 | 注册 方可回帖
返回
//