一个非常实用的Base64类

using System;

namespace SClassLibrary.SEncoding
{
/// <summary>
/// 有关base64编码算法的相关操作
/// 作者:尹曙光
/// </summary>
public class SBase64
{
public SBase64()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//--------------------------------------------------------------------------------
/// <summary>
/// 将字符串使用base64算法加密
/// </summary>
/// <param name="sourceString">待加密的字符串</param>
/// <param name="ens">System.Text.Encoding 对象,如创建中文编码集对象:System.Text.Encoding.GetEncoding(54936)</param>
/// <returns>加码后的文本字符串</returns>
public static string EncodingForString(string sourceString,System.Text.Encoding ens)
{
return Convert.ToBase64String(ens.GetBytes(sourceString));
}

/// <summary>
/// 将字符串使用base64算法加密
/// </summary>
/// <param name="sourceString">待加密的字符串</param>
/// <returns>加码后的文本字符串</returns>
public static string EncodingForString(string sourceString)
{
return EncodingForString(sourceString,System.Text.Encoding.GetEncoding(54936));
}

/// <summary>
/// 从base64编码的字符串中还原字符串,支持中文
/// </summary>
/// <param name="base64String">base64加密后的字符串</param>
/// <param name="ens">System.Text.Encoding 对象,如创建中文编码集对象:System.Text.Encoding.GetEncoding(54936)</param>
/// <returns>还原后的文本字符串</returns>
public static string DecodingForString(string base64String,System.Text.Encoding ens)
{
/**
* ***********************************************************
*
* 从base64String中取得的字节值为字符的机内码(ansi字符编码)
* 一般的,用机内码转换为汉字是公式:
* (char)(第一字节的二进制值*256+第二字节值)
* 而在c#中的char或string由于采用了unicode编码,就不能按照上面的公式计算了
* ansi的字节编和unicode编码不兼容
* 故利用.net类库提供的编码类实现从ansi编码到unicode代码的转换
*
* GetEncoding 方法依赖于基础平台支持大部分代码页。但是,对于下列情况提供系统支持:默认编码,即在执行此方法的计算机的区域设置中指定的编码;Little-Endian Unicode (UTF-16LE);Big-Endian Unicode (UTF-16BE);Windows 操作系统 (windows-1252);UTF-7;UTF-8;ASCII 以及 GB18030(简体中文)。
*
*指定下表中列出的其中一个名称以获取具有对应代码页的系统支持的编码。
*
* 代码页 名称
* 1200 “UTF-16LE”、“utf-16”、“ucs-2”、“unicode”或“ISO-10646-UCS-2”
* 1201 “UTF-16BE”或“unicodeFFFE”
* 1252 “windows-1252”
* 65000 “utf-7”、“csUnicode11UTF7”、“unicode-1-1-utf-7”、“unicode-2-0-utf-7”、“x-unicode-1-1-utf-7”或“x-unicode-2-0-utf-7”
* 65001 “utf-8”、“unicode-1-1-utf-8”、“unicode-2-0-utf-8”、“x-unicode-1-1-utf-8”或“x-unicode-2-0-utf-8”
* 20127 “us-ascii”、“us”、“ascii”、“ANSI_X3.4-1968”、“ANSI_X3.4-1986”、“cp367”、“csASCII”、“IBM367”、“iso-ir-6”、“ISO646-US”或“ISO_646.irv:1991”
* 54936 “GB18030”
*
* 某些平台可能不支持特定的代码页。例如,Windows 98 的美国版本可能不支持日语 Shift-jis 代码页(代码页 932)。这种情况下,GetEncoding 方法将在执行下面的 C# 代码时引发 NotSupportedException:
*
* Encoding enc = Encoding.GetEncoding("shift-jis");
*
* **************************************************************/
//从base64String中得到原始字符
return ens.GetString(Convert.FromBase64String(base64String));
}

/// <summary>
/// 从base64编码的字符串中还原字符串,支持中文
/// </summary>
/// <param name="base64String">base64加密后的字符串</param>
/// <returns>还原后的文本字符串</returns>
public static string DecodingForString(string base64String)
{
return DecodingForString(base64String,System.Text.Encoding.GetEncoding(54936));
}

//--------------------------------------------------------------------------------------

/// <summary>
/// 对任意类型的文件进行base64加码
/// </summary>
/// <param name="fileName">文件的路径和文件名</param>
/// <returns>对文件进行base64编码后的字符串</returns>
public static string EncodingForFile(string fileName)
{
System.IO.FileStream fs=System.IO.File.OpenRead(fileName);
System.IO.BinaryReader br= new System.IO.BinaryReader(fs);

/*System.Byte[] b=new System.Byte[fs.Length];
fs.Read(b,0,Convert.ToInt32(fs.Length));*/

string base64String=Convert.ToBase64String(br.ReadBytes((int)fs.Length));

br.Close();
fs.Close();
return base64String;
}

/// <summary>
/// 把经过base64编码的字符串保存为文件
/// </summary>
/// <param name="base64String">经base64加码后的字符串</param>
/// <param name="fileName">保存文件的路径和文件名</param>
/// <returns>保存文件是否成功</returns>
public static bool SaveDecodingToFile(string base64String,string fileName)
{
System.IO.FileStream fs=new System.IO.FileStream(fileName, System.IO.FileMode.Create);
System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs);
bw.Write(Convert.FromBase64String(base64String));
bw.Close();
fs.Close();
return true;
}

//-------------------------------------------------------------------------------

/// <summary>
/// 从网络地址一取得文件并转化为base64编码
/// </summary>
/// <param name="url">文件的url地址,一个绝对的url地址</param>
/// <param name="objWebClient">System.Net.WebClient 对象</param>
/// <returns></returns>
public static string EncodingFileFromUrl(string url,System.Net.WebClient objWebClient)
{
return Convert.ToBase64String(objWebClient.DownloadData(url));
}

/// <summary>
/// 从网络地址一取得文件并转化为base64编码
/// </summary>
/// <param name="url">文件的url地址,一个绝对的url地址</param>
/// <returns>将文件转化后的base64字符串</returns>
public static string EncodingFileFromUrl(string url)
{
//System.Net.WebClient myWebClient = new System.Net.WebClient();
return EncodingFileFromUrl(url,new System.Net.WebClient());
}
}
}

时间: 2024-09-26 12:41:46

一个非常实用的Base64类的相关文章

c++ 多线程写日志的一个很实用的日志类源码(支持 c++ builder)

1.日志基类 .h文件 //--------------------------------------------------------------------------- #ifndef UnitLogWriterH #define UnitLogWriterH #include <vcl.h> #include <time.h> #include <assert.h> //--------------------------------------------

一个简洁实用的PHP缓存类完整实例_php技巧

本文完整描述了一个简洁实用的PHP缓存类,可用来检查缓存文件是否在设置更新时间之内.清除缓存文件.根据当前动态文件生成缓存文件名.连续创建目录.缓存文件输出静态等功能.对于采用PHP开发CMS系统来说,离不开对缓存的处理,合理利用好缓存可有效的提高程序执行效率. php缓存类文件完整代码如下: <?php /* * 缓存类 cache */ class cache { //缓存目录 var $cacheRoot = "./cache/"; //缓存更新时间秒数,0为不缓存 var

一个强健 实用的asp+ajax二级联动菜单(有演示和附源程序打包下载)_应用技巧

一个强健 实用的ajax二级联动菜单(有演示和附源程序打包下载) 前些天在搞后台的时候要用到二级联动的菜单,到网上去找了半天也没找到满意的,不是这错就是那错,在选择的时候有时候不能返回.真是郁闷.     后来就看到有人用ajax写了无限级分类(牛,呵呵,本人看不懂.).就想到我那个后台不也可以用ajax试试,虽然比用javascript的慢点,但我这个实用.强健..不会出错,也不会选择某个大类后再返回无选择状态小类为空的状态.呵呵.文件目录:如图 主要代码如下:index.asp 复制代码 代

PHP实现的一个简单的数据库操作类

PHP实现的一个简单的数据库操作类 实现的功能: - 在实例化的时候能设置连接字符集 - 在实例化的时候能连接数据库 - 在实例化的时候能选择默认数据库 - 销毁对象时关闭数据库 代码如下: <?php // 数据库操作类MySQLDB class MySQLDB { // 声明属性 private $server; private $username; private $password; public $default_db; public $link; // 声明构造函数 public f

简单实用的php类

适合初学者使用的PHP类,建意做站时多封装成类,模块化,那样程序就会清晰多了.. 一个非常简单的php类,其实类到底是个什么东西,我也说不清楚,说白来就是许多函数都集合吧.放在一块一起使用.通过下面这个简单都例子,相信你一定会使用php的类了. 例(附使用方法): <?php//定义一个类名为Test的类class Test{var $id;var $main;function setid($id){   $this->id = $id;}function setmain($main){   

贴一个偶写的分页类

分页 抽象类==========================================================import java.util.ArrayList;import java.sql.Connection;import java.sql.ResultSet; import com.xxx.util.DBTool; /** * <pre> * 分页类.默认页面大小为20 * 这是一个抽象类.子类需要重构方法selResult() * </pre> */p

PHP跳转函数和一个通用的操作提示类的编写

PHP 跳转,即重定向浏览器到指定的 URL,是一个很常见的功能.这种功能也有一些细节性的要求,比如等待多少秒以后跳转,用不用JavaScript实现跳转,等等.下面的跳转方法考虑到很多,并参数化,可以用到具体的项目当中. <?php /** * 重定向浏览器到指定的 URL * * @param string $url 要重定向的 url * @param int $delay 等待多少秒以后跳转 * @param bool $js 指示是否返回用于跳转的 JavaScript 代码 * @p

根据模板文件生成一个静态html文件的类

一般我们用PHP输出一个html文件,总是用$head="<head>--</head>"这样一个长串来完成.本类主要提供一个简便的用PHP输出html文件的方法.避免了在程序中出现过多的带有长字串. 类定义文件 createhtml.class.php 如下: <?php //------------------- // TCreateHTML //根据模板文件生成一个静态html文件的类 // 作者:sharetop // email:ycshowto

运算符重载-用C++编程:定义一个四进制的类,重定义“+”号实现四进制数的累加。

问题描述 用C++编程:定义一个四进制的类,重定义"+"号实现四进制数的累加. 定义一个四进制的类,重定义"+"号实现四进制数的累加. 输入第一行输入所需要的四进制数的个数第二行开始,依次输入四进制数 输出所有输入四进制数累加的和 解决方案 又是作业贴啊,要是做的过程中有问题,LZ直接说遇到的问题吧 解决方案二: 我写了个简单的,你试试好用不,没有做输入判断,你输入一定不能输4或者4以上的数123+321+333=2103 #include ""