111,120
社区成员
发帖
与我相关
我的任务
分享
public class Base64
{
/// <summary>
/// Base64密码表
/// </summary>
private const string CodeTable = "ABEFGHefgI6JL5MNX3K4YZabcdhiQRS89+TUVjklmnvwxyopqCDrstuz01OPW27^";
/// <summary>
/// 补位符号
/// </summary>
private const char CodeChar = '$';
/// <summary>
/// Base64加密函数
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public static string Base64EnCdoe( string code )
{
List<byte> bytes = new List<byte>( Encoding.Default.GetBytes( code ) );
int bytes_len = bytes.Count;
int Int_Length = bytes_len / 3 + ( bytes_len % 3 != 0 ? 1 : 0 );
bytes.Add( 0 );
bytes.Add( 0 );
StringBuilder values = new StringBuilder();
for ( int i = 0; i < Int_Length; i++ )
{
values.Append( CodeTable[( byte )( bytes[i * 3] & 0x3F )] );
values.Append( CodeTable[( byte )( ( bytes[i * 3 + 1] & 0x0F ) << 2 | ( bytes[i * 3] >> 6 & 0x03 ) )] );
values.Append( CodeTable[( byte )( bytes[i * 3 + 2] << 4 & 0x30 | bytes[i * 3 + 1] >> 4 & 0x0F )] );
values.Append( CodeTable[( byte )( bytes[i * 3 + 2] >> 2 & 0x3F )] );
}
return bytes_len % 3 == 1 ? values.ToString().Substring( 0, values.Length - 2 ) + CodeChar + CodeChar : bytes_len % 3 == 2 ? values.ToString().Substring( 0, values.Length - 1 ) + CodeChar : values.ToString();
}
/// <summary>
/// Base64解密函数
/// </summary>
/// <param name="Code"></param>
/// <returns></returns>
public static string Base64DnCdoe( string Code )
{
List<byte> bytes = new List<byte>(); // 待解码的数组
int Temp = 0, j = 0;
for ( int i = 0; i < Code.Length; i++ )
{// 把密码根据密码表翻译回6位有效位的Byte数组
Temp = CodeTable.IndexOf( Code[i] );
if ( Temp >= 0 ) bytes.Add( ( byte )Temp ); else bytes.Add( 0 );
}
byte[] tmps = new byte[( bytes.Count / 4 ) * 3]; // 创建明文 Byte 数组
if ( bytes.Count % 4 == 0 )
{
for ( int i = 0; i < bytes.Count; )
{// 把四个Byte元素的值,去除高二位,然后存入临时 Int 变量以便于每次8位的取出
Temp = bytes[i++] | bytes[i++] << 6 | bytes[i++] << 12 | bytes[i++] << 18;
tmps[j++] = ( byte )Temp; // 取低八位
tmps[j++] = ( byte )( Temp >> 8 ); // 取中八位
tmps[j++] = ( byte )( Temp >> 16 ); // 取高八位
}
// 如果找到CodeChar字符(也就是补位符号,一般是‘=’)是在倒数第二,则,丢弃最后两字符,如果是在倒数第一,则丢弃最后一个字符,如果没有找到,则完整返回
return Encoding.Default.GetString( tmps, 0, ( Code.IndexOf( CodeChar ) == Code.Length - 2 ? tmps.Length - 2 : Code.IndexOf( CodeChar ) == Code.Length - 1 ? tmps.Length - 1 : tmps.Length ) );
}
else // 不是4的倍数,该加密字符串有不合法
return "";
}
}
public static byte[] base64Encode(byte[] byteData)
{
return System.Text.Encoding.ASCII.GetBytes(Convert.ToBase64String(byteData));
}
public static byte[] base64Encode(byte[] byteData)
{
return System.Text.Encoding.Default.GetBytes(Convert.ToBase64String(byteData));
}public static byte[] base64Encode(byte[] byteData)
{
return System.Text.Encoding.Default.GetBytes(Convert.ToBase64String);
}