• 字符串、字节数组、流之间的相互转换以及文件MD5的计算


      1 using System;
      2 using System.IO;
      3 using System.Security.Cryptography;
      4 using System.Text;
      5 
      6 namespace myMethod
      7 {
      8     class lgs
      9     {
     10         static void Main()
     11         {
     12             Console.ReadKey();
     13         }
     14 
     15         /// <summary>
     16         /// 使用不同的编码格式将  字符串 → 字节数组
     17         /// </summary>
     18         /// <returns></returns>
     19         static void StringToByteArray(string param, out byte[] result)
     20         {
     21             //result = Encoding.ASCII.GetBytes(param);
     22             //result = Encoding.UTF32.GetBytes(param);
     23             result = Encoding.UTF7.GetBytes(param);
     24         }
     25 
     26         /// <summary>
     27         /// 使用不同的编码格式将  字节数组 → 字符串
     28         /// </summary>
     29         /// <returns></returns>
     30         static void ByteArrayToString(byte[] param, out string result)
     31         {
     32             //result = Encoding.UTF7.GetString(param);
     33             //result = Encoding.Default.GetString(param);
     34             result = Encoding.ASCII.GetString(param);
     35         }
     36 
     37         /// <summary>
     38         /// 字符串转换为流
     39         /// </summary>
     40         static void StringToStream(string param, out MemoryStream result)
     41         {
     42             byte[] tmpArray = Convert.FromBase64String(param);  //相当于将字符串转换为等效的字节数组
     43             result = new MemoryStream(tmpArray);
     44         }
     45 
     46         /// <summary>
     47         /// 流转换了字符串
     48         /// </summary>
     49         static void StreamToString(MemoryStream param, out string result)
     50         {
     51             //方式一 :param.ToArray() 将流内容写入字节数组
     52             result = Encoding.Default.GetString(param.ToArray());
     53 
     54             //方式二:
     55             result = Convert.ToBase64String(param.ToArray());
     56         }
     57 
     58         /// <summary>
     59         /// 字节数组转换为流
     60         /// </summary>
     61         static void ByteArrayToStream(byte[] param, out MemoryStream result)
     62         {
     63             //方式一:
     64             //result = new MemoryStream(param);
     65 
     66             //方式二:
     67             result = new MemoryStream();
     68             result.Read(param, 0, param.Length);
     69         }
     70 
     71         /// <summary>
     72         /// 流转换为字节数组
     73         /// </summary>
     74         static void SteamToByteArray(MemoryStream param, out byte[] result)
     75         {
     76             //方式一:
     77             result = param.ToArray();
     78 
     79             //方式二:
     80             //param.Write(result, 0, (int)param.Length);
     81         }
     82 
     83         /// <summary>
     84         /// 计算文件的 MD5 值
     85         /// </summary>
     86         /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
     87         /// <returns>MD5 值16进制字符串</returns>
     88         static string MD5File(string fileName)
     89         {
     90             return HashFile(fileName, "md5");
     91         }
     92 
     93         /// <summary>
     94         /// 计算文件的 sha1 值
     95         /// </summary>
     96         /// <param name="fileName">要计算 sha1 值的文件名和路径</param>
     97         /// <returns>sha1 值16进制字符串</returns>
     98         static string SHA1File(string fileName)
     99         {
    100             return HashFile(fileName, "sha1");
    101         }
    102 
    103         /// <summary>
    104         /// 计算文件的哈希值
    105         /// </summary>
    106         /// <param name="fileName">要计算哈希值的文件名和路径</param>
    107         /// <param name="algName">算法:sha1,md5</param>
    108         /// <returns>哈希值16进制字符串</returns>
    109         static string HashFile(string fileName, string algName)
    110         {
    111             if (!File.Exists(fileName))
    112                 return string.Empty;
    113 
    114             FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    115             byte[] hashBytes = HashData(fs, algName);
    116             fs.Close();
    117             return ByteArrayToHexString(hashBytes);
    118         }
    119 
    120         /// <summary>
    121         /// 计算哈希值
    122         /// </summary>
    123         /// <param name="stream">要计算哈希值的 Stream</param>
    124         /// <param name="algName">算法:sha1,md5</param>
    125         /// <returns>哈希值字节数组</returns>
    126         static byte[] HashData(Stream stream, string algName)
    127         {
    128             HashAlgorithm algorithm;
    129             if (algName == null)
    130             {
    131                 throw new ArgumentNullException("algName 不能为 null");
    132             }
    133             if (string.Compare(algName, "sha1", true) == 0)
    134             {
    135                 algorithm = SHA1.Create();
    136             }
    137             else
    138             {
    139                 if (string.Compare(algName, "md5", true) != 0)
    140                 {
    141                     throw new Exception("algName 只能使用 sha1 或 md5");
    142                 }
    143                 algorithm = MD5.Create();
    144             }
    145             return algorithm.ComputeHash(stream);
    146         }
    147 
    148         /// <summary>
    149         /// 字节数组转换为16进制表示的字符串
    150         /// </summary>
    151         static string ByteArrayToHexString(byte[] buf)
    152         {
    153             // ToString(buf) --- 由以连字符分隔的十六进制对构成的字符串,其中每一对表示 value 中对应的元素;例如“7F-2C-4A”。
    154             return BitConverter.ToString(buf).Replace("-", "");
    155         }
    156     }
    157 }

     参考:https://www.oschina.net/code/snippet_2256220_53535

  • 相关阅读:
    南邮NOJ整除的尾数
    【HDOJ】2844 Coins
    【HDOJ】2546 饭卡
    【HDOJ】1031 Design T-Shirt
    【HDOJ】1983 Kaitou Kid
    【HDOJ】2612 Find a way
    【原创】如何构建MIPS交叉编译工具链
    【HDOJ】1239 Calling Extraterrestrial Intelligence Again
    【Python Network】使用DOM生成XML
    【HDOJ】2602 Bone Collector
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/9969733.html
Copyright © 2020-2023  润新知