常用编码工具类

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();
      }
      catch{// (System.Exception exp) {
        //流错误
      }

    }

    /** <summary>
    /// 编码文件
    /// </summary>
    /// <param name="sInputFilename">输入文件</param>
    /// <param name="sOutputFilename">输出文件</param>
    public void EncryptFile(string sInputFilename,string sOutputFilename){

      System.IO.FileStream inFile;     
      byte[]                 binaryData;

      try {
        inFile = new System.IO.FileStream(sInputFilename,
          System.IO.FileMode.Open,
          System.IO.FileAccess.Read);
        binaryData = new Byte[inFile.Length];
        long bytesRead = inFile.Read(binaryData, 0,
          (int) inFile.Length);
        inFile.Close();
      }
      catch { //(System.Exception exp) {
        return;
      }

      // 转换二进制输入为Base64 UUEncoded输出
      // 每3个字节在源数据里作为4个字节
      long arrayLength = (long) ((4.0d/3.0d) * binaryData.Length);
    
      // 如果无法整除4
      if (arrayLength % 4 != 0) {
        arrayLength += 4 - arrayLength % 4;
      }
    
      char[] base64CharArray = new char[arrayLength];
      try {
        System.Convert.ToBase64CharArray(binaryData,
          0,
          binaryData.Length,
          base64CharArray,
          0);
      }
      catch (System.ArgumentNullException) {
        //二进制数组为NULL.
        return;
      }
      catch (System.ArgumentOutOfRangeException) {
        //长度不够
        return;
      }

      // 写UUEncoded数据到文件内
      System.IO.StreamWriter outFile;
      try {
        outFile = new System.IO.StreamWriter(sOutputFilename,
          false,
          System.Text.Encoding.ASCII);             
        outFile.Write(base64CharArray);
        outFile.Close();
      }
      catch{// (System.Exception exp) {
        //文件流出错
      }
 

    }
  }
  /** <summary>
  /// DES 加密
  /// 支持Key(钥匙)加密变化
  /// 支持还原
  ///
  /// 演示操作:
  ///  // 64位,8个字节
  ///  string sSecretKey;
  ///
  ///  // 获取Key
  ///  sSecretKey = GenerateKey();
  ///
  ///  // 托管
  ///  GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );
  ///
  ///  // 加密文件
  ///  EncryptFile(@"C:\MyData.txt",
  ///  @"C:\Encrypted.txt",
  ///  sSecretKey);
  ///
  ///  // 解密文件
  ///  DecryptFile(@"C:\Encrypted.txt",
  ///  @"C:\Decrypted.txt",
  ///  sSecretKey);
  ///
  ///  // 释放托管内容
  ///  ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
  ///  gch.Free();
  /// </summary>
  public class DES {
    [DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
    public static extern bool ZeroMemory(IntPtr Destination, int Length);

    public DES() {
      //
      // TODO: 在此处添加构造函数逻辑
      //
    }

    /** <summary>
    /// 创建Key
    /// </summary>
    /// <returns></returns>
    public string GenerateKey() {
      // 创建一个DES 算法的实例。自动产生Key
      DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();

      // 返回自动创建的Key 用于加密
      return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
    }

    /** <summary>
    /// 加密字符串
    /// </summary>
    /// <param name="sInputString">输入字符</param>
    /// <param name="sKey">Key</param>
    /// <returns>加密结果</returns>
    public string EncryptString(string sInputString,string sKey){
      byte[] data = Encoding.Default.GetBytes(sInputString);
      byte[] result;
      DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
      DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
      ICryptoTransform desencrypt = DES.CreateEncryptor();
      result = desencrypt.TransformFinalBlock(data,0,data.Length);

      string desString = "";
      for(int i=0;i<result.Length;i++){
        desString += result[i].ToString() + "-";
      }
      
      //return desString.TrimEnd('-');
      return BitConverter.ToString(result);
    }

    /** <summary>
    /// 解密字符串
    /// </summary>
    /// <param name="sInputString">输入字符</param>
    /// <param name="sKey">Key</param>
    /// <returns>解密结果</returns>
    public string DecryptString(string sInputString,string sKey){
      string[] sInput = sInputString.Split("-".ToCharArray());
      byte[] data = new byte[sInput.Length];
      byte[] result;
      for(int i=0;i<sInput.Length;i++)
        data[i] = byte.Parse(sInput[i],System.Globalization.NumberStyles.HexNumber);

      DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
      DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
      ICryptoTransform desencrypt = DES.CreateDecryptor();
      result = desencrypt.TransformFinalBlock(data,0,data.Length);
      return Encoding.Default.GetString(result);
    }

    /** <summary>
    /// 加密文件
    /// </summary>
    /// <param name="sInputFilename">输入文件</param>
    /// <param name="sOutputFilename">输出文件</param>
    /// <param name="sKey">Key</param>
    public void EncryptFile(string sInputFilename,
      string sOutputFilename,
      string sKey) {
      FileStream fsInput = new FileStream(sInputFilename,
        FileMode.Open,
        FileAccess.Read);

      FileStream fsEncrypted = new FileStream(sOutputFilename,
        FileMode.Create,
        FileAccess.Write);
      DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
      DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
      ICryptoTransform desencrypt = DES.CreateEncryptor();
      CryptoStream cryptostream = new CryptoStream(fsEncrypted,
        desencrypt,
        CryptoStreamMode.Write);

      byte[] bytearrayinput = new byte[fsInput.Length];
      fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
      cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
      cryptostream.Close();
      fsInput.Close();
      fsEncrypted.Close();
    }

    /** <summary>
    /// 解密文件
    /// </summary>
    /// <param name="sInputFilename">输入文件</param>
    /// <param name="sOutputFilename">输出文件</param>
    /// <param name="sKey">Key</param>
    public void DecryptFile(string sInputFilename,
      string sOutputFilename,
      string sKey) {
      DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
      DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

      FileStream fsread = new FileStream(sInputFilename,
        FileMode.Open,
        FileAccess.Read);
      ICryptoTransform desdecrypt = DES.CreateDecryptor();
      CryptoStream cryptostreamDecr = new CryptoStream(fsread,
        desdecrypt,
        CryptoStreamMode.Read);
      StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
      fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
      fsDecrypted.Flush();
      fsDecrypted.Close();
    }

  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 NumberUtil 工具类编码示例,包含了常用的数字处理方法: ```java public class NumberUtil { /** * 判断一个字符串是否是数字 * * @param str 字符串 * @return 如果是数字返回 true,否则返回 false */ public static boolean isNumeric(String str) { if (str == null || str.length() == 0) { return false; } for (int i = 0; i < str.length(); i++) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } /** * 将字符串转换为整数,如果字符串不是数字,则返回 0 * * @param str 字符串 * @return 整数 */ public static int parseInt(String str) { if (str == null || str.length() == 0) { return 0; } int result = 0; try { result = Integer.parseInt(str); } catch (NumberFormatException e) { e.printStackTrace(); } return result; } /** * 将字符串转换为浮点数,如果字符串不是数字,则返回 0.0 * * @param str 字符串 * @return 浮点数 */ public static double parseDouble(String str) { if (str == null || str.length() == 0) { return 0.0; } double result = 0.0; try { result = Double.parseDouble(str); } catch (NumberFormatException e) { e.printStackTrace(); } return result; } /** * 将一个整数转换为指定长度的字符串,如果长度不足则在前面补 0 * * @param num 整数 * @param length 长度 * @return 指定长度的字符串 */ public static String padLeft(int num, int length) { return String.format("%0" + length + "d", num); } } ``` 这个工具类包含了以下方法: - `isNumeric`:判断一个字符串是否是数字。 - `parseInt`:将字符串转换为整数。 - `parseDouble`:将字符串转换为浮点数。 - `padLeft`:将一个整数转换为指定长度的字符串,如果长度不足则在前面补 0。 这些方法可以帮助我们在处理数字时更加方便地进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值