62,264
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
namespace Lib
{
/// <summary>
/// 取得byte[]、string的哈希值
/// </summary>
public class Hash
{
/// <summary>
/// MD5(32bit)
/// </summary>
/// <param name="Input">Input</param>
public static string MD5(byte[] Input)
{
MD5 md5 = new MD5CryptoServiceProvider();
return Util.BytesToHexString(md5.ComputeHash(Input));
}
/// <summary>
/// MD5(32bit)
/// </summary>
/// <param name="Input">Input</param>
public static string MD5(string Input)
{
return MD5(Util.StringToBytes(Input));
}
/// <summary>
/// SHA1(160bit)
/// </summary>
/// <param name="Input">Input</param>
public static string SHA1(byte[] Input)
{
SHA1 sha1 = new SHA1Managed();
return Util.BytesToHexString(sha1.ComputeHash(Input));
}
/// <summary>
/// SHA1(160bit)
/// </summary>
/// <param name="Input">Input</param>
public static string SHA1(string Input)
{
return SHA1(Util.StringToBytes(Input));
}
/// <summary>
/// SHA256(256bit)
/// </summary>
/// <param name="Input">Input</param>
public static string SHA256(byte[] Input)
{
SHA256 sha256 = new SHA256Managed();
return Util.BytesToHexString(sha256.ComputeHash(Input));
}
/// <summary>
/// SHA256(256bit)
/// </summary>
/// <param name="Input">Input</param>
public static string SHA256(string Input)
{
return SHA256(Util.StringToBytes(Input));
}
/// <summary>
/// SHA384(384bit)
/// </summary>
/// <param name="Input">Input</param>
public static string SHA384(byte[] Input)
{
SHA384 sha384 = new SHA384Managed();
return Util.BytesToHexString(sha384.ComputeHash(Input));
}
/// <summary>
/// SHA384(384bit)
/// </summary>
/// <param name="Input">Input</param>
public static string SHA384(string Input)
{
return SHA384(Util.StringToBytes(Input));
}
/// <summary>
/// SHA512(512bit)
/// </summary>
/// <param name="Input">Input</param>
public static string SHA512(byte[] Input)
{
SHA512 sha512 = new SHA512Managed();
return Util.BytesToHexString(sha512.ComputeHash(Input));
}
/// <summary>
/// SHA512(512bit)
/// </summary>
/// <param name="Input">Input</param>
public static string SHA512(string Input)
{
return SHA512(Util.StringToBytes(Input));
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Lib
{
/// <summary>
/// string与byte[]转换
/// </summary>
public class Util
{
/// <summary>
/// 根据缺省字符编码方案将string转换成byte[]
/// </summary>
/// <param name="s">目标字符串</param>
/// <returns>编码后的字节数组</returns>
public static byte[] StringToBytes(string s)
{
return System.Text.Encoding.Default.GetBytes(s);
}
/// <summary>
/// 根据自定义字符编码方案将string转换成byte[]
/// </summary>
/// <param name="s">目标字符串</param>
/// <param name="encoding">自定义字符编码方案</param>
/// <returns>编码后的字节数组</returns>
public static byte[] StringToBytes(string s, Encoding encoding)
{
return encoding.GetBytes(s);
}
/// <summary>
/// 根据缺省字符编码方案将byte[]转换成string
/// </summary>
/// <param name="b">目标字节数组</param>
/// <returns>编码后的字符串</returns>
public static string BytesToString(byte[] b)
{
return System.Text.Encoding.Default.GetString(b);
}
/// <summary>
/// 根据自定义字符编码方案将byte[]转换成string
/// </summary>
/// <param name="b">目标字节数组</param>
/// <param name="encoding">字符编码方案</param>
/// <returns>编码后的字符串</returns>
public static string BytesToString(byte[] b, Encoding encoding)
{
return encoding.GetString(b);
}
/// <summary>
/// 将字节数组转换成十六进制string
/// </summary>
/// <param name="b">目标字节数组</param>
/// <returns>转换后的字符串</returns>
public static string BytesToHexString(byte[] b)
{
if (b == null)
return null;
StringBuilder sb = new StringBuilder(b.Length * 2);
for (int i = 0; i < b.Length; i++)
{
sb.AppendFormat("{0:x2}", b[i]);
}
return sb.ToString();
}
/// <summary>
/// 将十六进制string转换成字节数组
/// </summary>
/// <param name="s">目标字符串</param>
/// <returns>转换后的字节数组</returns>
public static byte[] HexStringToBytes(string s)
{
if (s == null) return null;
int nLen = s.Length;
if ((nLen % 2) != 0) // 如果长度为奇数,则忽略最后一个十六位字符
{
nLen--;
}
byte[] buffer = new byte[nLen / 2];
for (int i = 0; i < nLen; i += 2)
{
buffer[i / 2] = Convert.ToByte(s.Substring(i, 2), 16);
}
return buffer;
}
}
}