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