常用编码工具类,支持base64,md5,des,crc32
http://www.iwms.net/n1507c13.aspx
常用编码工具类,支持base64,md5,des,crc32
支持从文件到文件,从字符串到字符串的方式操作
以下是源码
using System;
using System.IO;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Text;
namespace YNEC.Services.Encrypt {
/// <summary>
/// CRC 效验
/// 快速检测算法
/// </summary>
public class CRC32{
protected ulong[] crc32Table;
/// <summary>
/// 构造:初始化效验表
/// </summary>
public CRC32() {
const ulong ulPolynomial = 0xEDB88320
ulong dwCrc;
crc32Table = new ulong[256];
int i,j;
for(i = 0 i < 256 i++) {
dwCrc = (ulong)i;
for(j = 8 j > 0 j--) {
if((dwCrc & 1)==1)
dwCrc = (dwCrc >> 1) ^ ulPolynomial;
else
dwCrc >>= 1
}
crc32Table[i] = dwCrc;
}
}
/// <summary>
/// 字节数组效验
/// </summary>
/// <param name="buffer">ref 字节数组</param>
/// <returns></returns>
public ulong ByteCRC(ref byte[] buffer) {
ulong ulCRC = 0xffffffff
ulong len;
len = (ulong)buffer.Length;
for (ulong buffptr=0 buffptr < len; buffptr++) {
ulong tabPtr = ulCRC & 0xFF
tabPtr = tabPtr ^ buffer[buffptr];
ulCRC = ulCRC >> 8
ulCRC = ulCRC ^ crc32Table[tabPtr];
}
return ulCRC ^ 0xffffffff
}
/// <summary>
/// 字符串效验
/// </summary>
/// <param name="sInputString">字符串</param>
/// <returns></returns>
public ulong StringCRC(string sInputString){
byte[] buffer = Encoding.Default.GetBytes(sInputString);
return ByteCRC(ref buffer);
}
/// <summary>
/// 文件效验
/// </summary>
/// <param name="sInputFilename">输入文件</param>
/// <returns></returns>
public ulong FileCRC(string sInputFilename){
FileStream inFile = new System.IO.FileStream(sInputFilename, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] bInput = new byte[inFile.Length];
inFile.Read(bInput,0,bInput.Length);
inFile.Close();
return ByteCRC(ref bInput);
}
}
/// <summary>
/// MD5 无逆向编码
/// 获取唯一特征串,可用于密码加密
/// (无法还原)
/// </summary>
public class MD5 {
public MD5(){
}
/// <summary>
/// 获取字符串的特征串
/// </summary>
/// <param name="sInputString">输入文本</param>
/// <returns></returns>
public string HashString(string sInputString){
System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
string encoded = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(sInputString))).Replace("-","");
return encoded;
}
/// <summary>
/// 获取文件的特征串
/// </summary>
/// <param name="sInputFilename">输入文件</param>
/// <returns></returns>
public string HashFile(string sInputFilename){
System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
FileStream inFile = new System.IO.FileStream(sInputFilename, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] bInput = new byte[inFile.Length];
inFile.Read(bInput,0,bInput.Length);
inFile.Close();
string encoded = BitConverter.ToString(md5.ComputeHash(bInput)).Replace("-","");
return encoded;
}
}
/// <summary>
/// Base64 UUEncoded 编码
/// 将二进制编码为ASCII文本,用于网络传输
/// (可还原)
/// </summary>
public class BASE64{
public BASE64(){
}
/// <summary>
/// 解码字符串
/// </summary>
/// <param name="sInputString">输入文本</param>
/// <returns></returns>
public string DecryptString(string sInputString){
char[] sInput = sInputString.ToCharArray();
try{
byte[] bOutput = System.Convert.FromBase64String(sInputString);
return Encoding.Default.GetString(bOutput);
}
catch ( System.ArgumentNullException ) {
//base 64 字符数组为null
return ""
}
catch ( System.FormatException ) {
//长度错误,无法整除4
return ""
}
}
/// <summary>
/// 编码字符串
/// </summary>
/// <param name="sInputString">输入文本</param>
/// <returns></returns>
public string EncryptString(string sInputString){
byte[] bInput = Encoding.Default.GetBytes(sInputString);
try {
return System.Convert.ToBase64String(bInput,0,bInput.Length);
}
catch (System.ArgumentNullException) {
//二进制数组为NULL.
return ""
}
catch (System.ArgumentOutOfRangeException) {
//长度不够
return ""
}
}
/// <summary>
/// 解码文件
/// </summary>
/// <param name="sInputFilename">输入文件</param>
/// <param name="sOutputFilename">输出文件</param>
public void DecryptFile(string sInputFilename,string sOutputFilename) {
System.IO.StreamReader inFile;
char[] base64CharArray;
try {
inFile = new System.IO.StreamReader(sInputFilename,
System.Text.Encoding.ASCII);
base64CharArray = new char[inFile.BaseStream.Length];
inFile.Read(base64CharArray, 0, (int)inFile.BaseStream.Length);
inFile.Close();
}
catch {//(System.Exception exp) {
return
}
// 转换Base64 UUEncoded为二进制输出
byte[] binaryData;
try {
binaryData =
System.Convert.FromBase64CharArray(base64CharArray,
0,
base64CharArray.Length);
}
catch ( System.ArgumentNullException ) {
//base 64 字符数组为null
return
}
catch ( System.FormatException ) {
//长度错误,无法整除4
return
}
// 写输出数据
System.IO.FileStream outFile;
try {
outFile = new System.IO.FileStream(sOutputFilename,
System.IO.FileMode.Create,
System.IO.FileAccess.Write);
outFile.Write(binaryData, 0, binaryData.Length);
outFile.Close();