0、前言
public
static
String Encode(Byte[] abData)

...
{
Int32 dwLoop = 0, dwCharIndex = 0, dwCharCount;
Char[] acPart = null;
StringBuilder sbOutput = null;

if (abData == null || m_acBaseMap == null || m_acBaseMap.Length < MapLength)
return null;

try

...{
dwCharCount = (Int32)(abData.Length / 5f * 8f) + 1;
sbOutput = new StringBuilder(dwCharCount);
acPart = new Char[8];
}
catch (Exception e)

...{
Trace.WriteLine("CBase32.Encode: Initialize buffer failed! " + e.Message);
}
if (acPart == null || sbOutput == null)
return null;

dwCharCount = 0;
for (dwLoop = 0; dwLoop < abData.Length; dwLoop += 5)

...{
Array.Clear(acPart, 0, acPart.Length);
// every 5 bytes is a unit,can convert to 8 chars
// data format:
// AAAAABBB BBCCCCCD DDDDEEEE EFFFFFGG GGGHHHHH
switch (abData.Length - dwLoop)

...{
case 1:
dwCharIndex = abData[dwLoop] >> 3; // AAAAA
acPart[0] = m_acBaseMap[dwCharIndex];
dwCharIndex = (abData[dwLoop] & 0x7) << 2; // BBB00
acPart[1] = m_acBaseMap[dwCharIndex];
dwCharCount = 2;
break;

case 2:
dwCharIndex = abData[dwLoop] >> 3;
几年前由于做一些和加密有关的工作,所以写了几个编码的示例,包括Base32和Base24,当年示例代码写得比较随手,而且不是完整的部分,仅演示编码解码的过程,存在不少问题。Blog很少打理,发觉不少朋友对这部分比较感兴趣,不更新一下有误导大家的嫌疑呀,所以重新更新一下示例,希望对大家有帮助,同时也希望和大家讨论是否有更有效的算法。
1、完整的示例
再次声明,代码中不保证没有错误,如果给各位的工作代码了困扰,本人只能深表歉意。同时也希望各位问题如果发现错误,请及时指正。
编码函数
public
static
String Encode(Byte[] abData)
...
{
Int32 dwLoop = 0, dwCharIndex = 0, dwCharCount;
Char[] acPart = null;
StringBuilder sbOutput = null;
if (abData == null || m_acBaseMap == null || m_acBaseMap.Length < MapLength)
return null;
try
...{
dwCharCount = (Int32)(abData.Length / 5f * 8f) + 1;
sbOutput = new StringBuilder(dwCharCount);
acPart = new Char[8];
}
catch (Exception e)
...{
Trace.WriteLine("CBase32.Encode: Initialize buffer failed! " + e.Message);
}
if (acPart == null || sbOutput == null)
return null;
dwCharCount = 0;
for (dwLoop = 0; dwLoop < abData.Length; dwLoop += 5)
...{
Array.Clear(acPart, 0, acPart.Length);
// every 5 bytes is a unit,can convert to 8 chars
// data format:
// AAAAABBB BBCCCCCD DDDDEEEE EFFFFFGG GGGHHHHH
switch (abData.Length - dwLoop)
...{
case 1:
dwCharIndex = abData[dwLoop] >> 3; // AAAAA
acPart[0] = m_acBaseMap[dwCharIndex];
dwCharIndex = (abData[dwLoop] & 0x7) << 2; // BBB00
acPart[1] = m_acBaseMap[dwCharIndex];
dwCharCount = 2;
break;
case 2:
dwCharIndex = abData[dwLoop] >> 3;

本文提供了一个关于Base32编码的完整示例,包括编码和解码函数。作者在做加密工作时编写了这些示例,并注意到之前的代码可能存在错误,因此更新了示例以避免误导读者。作者期待这些示例能对读者有所帮助,并欢迎讨论更高效的算法。
最低0.47元/天 解锁文章
1183

被折叠的 条评论
为什么被折叠?



