闲来没事,自己写了一个基于Base64加密解密算法
2008-12-10 20:06
477 查看
using System; using System.Collections.Generic; using System.Text; public class Base64 { #region 系统变量 /// <summary> /// Base64密码表 /// </summary> private const string CodeTable = "ABEFGHefgI6JL5MNX3K4YZabcdhiQRS89+TUVjklmnvwxyopqCDrstuz01OPW27^"; /// <summary> /// 补位符号 /// </summary> private const char CodeChar = '$'; #endregion 系统变量 /// <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 ""; } }
相关文章推荐
- 提供一个基于.NET SymmetricAlgorithm 类的、带私钥的加密/解密算法的包装类
- 提供一个基于.NET的加密/解密算法[转.CNSDN.com.cn]
- 提供一个基于.NET的加密/解密算法
- (java功能篇) 基于Apache的Base64加密解密
- [★]基于.NET 的 加密 解密 算法总结[一]
- (反射方法)写一个将一个String类型的json经过base64加密后解密转化成javaBean的工具类
- Base64 算法原理,以及编码、解码【加密、解密】 介绍
- lua之base64加密和解密算法。
- 加密解密算法java实现(1)—BASE64
- 【算法】Gh0st配置加密与解密算法(异或、Base64)
- 整合一个基于c#的RSA私钥加密公钥解密的Helper类,含源码
- 常见的加密和解密算法—BASE64
- 整合一个基于c#的RSA私钥加密公钥解密的Helper类,含源码
- 写一个将一个String类型的json经过base64加密后解密转化成javaBean的工具类
- Base64 算法原理,以及编码、解码【加密、解密】 介绍
- Base64 算法原理,以及编码、解码【加密、解密】 介绍
- JS实现的3des+base64加密解密算法完整示例
- 一个加密解密算法。
- 今天完成了一个加密解密算法的编写
- [★]基于.NET 的 加密 解密 算法总结[二]