using
System;
using
System.Collections.Generic;
using
System.Text;
using
Microsoft.Win32;
//对注册表操作
using
System.Collections;
//使用Arraylist
using
System.Security.Cryptography;
//加密解密
using
System.IO;
//文件操作
using
System.Runtime.InteropServices;
//调用DLL DllImport
using
System.Management;
//获取硬件信息
using
System.Net;
//获取IP地址是用到
using
System.Drawing;
//image
using
System.Net.NetworkInformation;
//ping 用到
using
System.Text.RegularExpressions;
//正则
using
System.Data;
using
System.Data.SqlClient;
using
Microsoft.VisualBasic;
//简体转繁体时用到
using
System.Web;
//html UrlEncode
//注册表操作
public
class
GF_RegReadWrite
{
/// <summary>
/// 读取路径为keypath,键名为keyname的注册表键值,缺省返回def
/// </summary>
/// <param name="rootkey"></param>
/// <param name="keypath">路径</param>
/// <param name="keyname">键名</param>
/// <param name="rtn">默认为null</param>
/// <returns></returns>
static
public
bool
GetRegVal(RegistryKey rootkey,
string
keypath,
string
keyname,
out
string
rtn)
{
rtn =
""
;
try
{
RegistryKey key = rootkey.OpenSubKey(keypath);
rtn = key.GetValue(keyname).ToString();
key.Close();
return
true
;
}
catch
{
return
false
;
}
}
/// <summary>
/// 设置路径为keypath,键名为keyname的注册表键值为keyval
/// </summary>
/// <param name="rootkey"></param>
/// <param name="keypath"></param>
/// <param name="keyname"></param>
/// <param name="keyval"></param>
/// <returns></returns>
static
public
bool
SetRegVal(RegistryKey rootkey,
string
keypath,
string
keyname,
string
keyval)
{
try
{
RegistryKey key = rootkey.OpenSubKey(keypath,
true
);
if
(key ==
null
)
key = rootkey.CreateSubKey(keypath);
key.SetValue(keyname, (
object
)keyval);
key.Close();
return
true
;
}
catch
{
return
false
;
}
}
/// 创建路径为keypath的键
private
RegistryKey CreateRegKey(RegistryKey rootkey,
string
keypath)
{
try
{
return
rootkey.CreateSubKey(keypath);
}
catch
{
return
null
;
}
}
/// 删除路径为keypath的子项
private
bool
DelRegSubKey(RegistryKey rootkey,
string
keypath)
{
try
{
rootkey.DeleteSubKey(keypath);
return
true
;
}
catch
{
return
false
;
}
}
/// 删除路径为keypath的子项及其附属子项
private
bool
DelRegSubKeyTree(RegistryKey rootkey,
string
keypath)
{
try
{
rootkey.DeleteSubKeyTree(keypath);
return
true
;
}
catch
{
return
false
;
}
}
/// 删除路径为keypath下键名为keyname的键值
private
bool
DelRegKeyVal(RegistryKey rootkey,
string
keypath,
string
keyname)
{
try
{
RegistryKey key = rootkey.OpenSubKey(keypath,
true
);
key.DeleteValue(keyname);
return
true
;
}
catch
{
return
false
;
}
}
}
//类型转换
public
class
GF_Convert
{
/// <summary>
/// 字符串 转换 char数组
/// </summary>
/// <param name="in_str"></param>
/// <param name="in_len"></param>
/// <returns></returns>
public
static
char
[] string2chararray(
string
in_str,
int
in_len)
{
char
[] ch =
new
char
[in_len];
in_str.ToCharArray().CopyTo(ch, 0);
return
ch;
}
/// <summary>
/// char数组 转换 字符串
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public
static
string
chararray2string(
char
[] in_str)
{
string
out_str;
out_str =
new
string
(in_str);
int
i = out_str.IndexOf(
'\0'
, 0);
if
(i == -1)
i = 16;
return
out_str.Substring(0, i);
}
/// <summary>
/// byte数组 转换 字符串
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public
static
string
bytearray2string(
byte
[] in_str)
{
string
out_str;
out_str = System.Text.Encoding.Default.GetString(in_str);
return
out_str.Substring(0, out_str.IndexOf(
'\0'
, 0));
}
/// <summary>
/// 字符串 转换 byte数组 注意转换出来会使原来的bytearray长度变短
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public
static
byte
[] string2bytearray(
string
in_str)
{
return
System.Text.Encoding.Default.GetBytes(in_str);
}
/// <summary>
/// 字符串 转换 byte数组 长度为传如的长度
/// </summary>
/// <param name="in_str">传入字符串</param>
/// <param name="iLen">目标字节数组长度</param>
/// <returns></returns>
public
static
byte
[] string2bytearray(
string
in_str,
int
iLen)
{
byte
[] bytes =
new
byte
[iLen];
byte
[] bsources=System.Text.Encoding.Default.GetBytes(in_str);
Array.Copy(bsources, bytes, bsources.Length);
return
bytes;
}
/// <summary>
/// 将字符串编码为Base64字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public
static
string
Base64Encode(
string
str)
{
byte
[] barray;
barray = Encoding.Default.GetBytes(str);
return
Convert.ToBase64String(barray);
}
/// <summary>
/// 将Base64字符串解码为普通字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public
static
string
Base64Decode(
string
str)
{
byte
[] barray;
try
{
barray = Convert.FromBase64String(str);
return
Encoding.Default.GetString(barray);
}
catch
{
return
str;
}
}
/// <summary>
/// 图片 转换 byte数组
/// </summary>
/// <param name="pic"></param>
/// <param name="fmt"></param>
/// <returns></returns>
public
static
byte
[] image_Image2Byte(Image pic, System.Drawing.Imaging.ImageFormat fmt)
{
MemoryStream mem =
new
MemoryStream();
pic.Save(mem, fmt);
mem.Flush();
return
mem.ToArray();
}
/// <summary>
/// byte数组 转换 图片
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public
static
Image image_Byte2Image(
byte
[] bytes)
{
MemoryStream mem =
new
MemoryStream(bytes,
true
);
mem.Read(bytes, 0, bytes.Length);
mem.Flush();
Image aa = Image.FromStream(mem);
return
aa;
}
/// <summary>
/// ip 转换 长整形
/// </summary>
/// <param name="strIP"></param>
/// <returns></returns>
public
static
long
IP2Long(
string
strIP)
{
long
[] ip =
new
long
[4];
string
[] s = strIP.Split(
'.'
);
ip[0] =
long
.Parse(s[0]);
ip[1] =
long
.Parse(s[1]);
ip[2] =
long
.Parse(s[2]);
ip[3] =
long
.Parse(s[3]);
return
(ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
}
/// <summary>
/// 长整形 转换 IP
/// </summary>
/// <param name="longIP"></param>
/// <returns></returns>
public
static
string
Long2IP(
long
longIP)
{
StringBuilder sb =
new
StringBuilder(
""
);
sb.Append(longIP >> 24);
sb.Append(
"."
);
//将高8位置0,然后右移16为
sb.Append((longIP & 0x00FFFFFF) >> 16);
sb.Append(
"."
);
sb.Append((longIP & 0x0000FFFF) >> 8);
sb.Append(
"."
);
sb.Append((longIP & 0x000000FF));
return
sb.ToString();
}
/// <summary>
/// 将8位日期型整型数据转换为日期字符串数据
/// </summary>
/// <param name="date">整型日期</param>
/// <param name="chnType">是否以中文年月日输出</param>
/// <returns></returns>
public
static
string
FormatDate(
int
date,
bool
chnType)
{
string
dateStr = date.ToString();
if
(date <= 0 || dateStr.Length != 8)
return
dateStr;
if
(chnType)
return
dateStr.Substring(0, 4) +
"年"
+ dateStr.Substring(4, 2) +
"月"
+ dateStr.Substring(6) +
"日"
;
return
dateStr.Substring(0, 4) +
"-"
+ dateStr.Substring(4, 2) +
"-"
+ dateStr.Substring(6);
}
/// <summary>
/// string型转换为bool型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的bool类型结果</returns>
public
static
bool
StrToBool(
object
expression,
bool
defValue)
{
if
(expression !=
null
)
return
StrToBool(expression, defValue);
return
defValue;
}
/// <summary>
/// string型转换为bool型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的bool类型结果</returns>
public
static
bool
StrToBool(
string
expression,
bool
defValue)
{
if
(expression !=
null
)
{
if
(
string
.Compare(expression,
"true"
,
true
) == 0)
return
true
;
else
if
(
string
.Compare(expression,
"false"
,
true
) == 0)
return
false
;
}
return
defValue;
}
/// <summary>
/// 将对象转换为Int32类型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
int
ObjectToInt(
object
expression)
{
return
ObjectToInt(expression, 0);
}
/// <summary>
/// 将对象转换为Int32类型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
int
ObjectToInt(
object
expression,
int
defValue)
{
if
(expression !=
null
)
return
StrToInt(expression.ToString(), defValue);
return
defValue;
}
/// <summary>
/// 将对象转换为Int32类型,转换失败返回0
/// </summary>
/// <param name="str">要转换的字符串</param>
/// <returns>转换后的int类型结果</returns>
public
static
int
StrToInt(
string
str)
{
return
StrToInt(str, 0);
}
/// <summary>
/// 将对象转换为Int32类型
/// </summary>
/// <param name="str">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
int
StrToInt(
string
str,
int
defValue)
{
if
(
string
.IsNullOrEmpty(str) || str.Trim().Length >= 11 || !Regex.IsMatch(str.Trim(),
@"^([-]|[0-9])[0-9]*(\.\w*)?$"
))
return
defValue;
int
rv;
if
(Int32.TryParse(str,
out
rv))
return
rv;
return
Convert.ToInt32(StrToFloat(str, defValue));
}
/// <summary>
/// string型转换为float型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
float
StrToFloat(
object
strValue,
float
defValue)
{
if
((strValue ==
null
))
return
defValue;
return
StrToFloat(strValue.ToString(), defValue);
}
/// <summary>
/// string型转换为float型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
float
ObjectToFloat(
object
strValue,
float
defValue)
{
if
((strValue ==
null
))
return
defValue;
return
StrToFloat(strValue.ToString(), defValue);
}
/// <summary>
/// string型转换为float型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
float
ObjectToFloat(
object
strValue)
{
return
ObjectToFloat(strValue.ToString(), 0);
}
/// <summary>
/// string型转换为float型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <returns>转换后的int类型结果</returns>
public
static
float
StrToFloat(
string
strValue)
{
if
((strValue ==
null
))
return
0;
return
StrToFloat(strValue.ToString(), 0);
}
/// <summary>
/// string型转换为float型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
float
StrToFloat(
string
strValue,
float
defValue)
{
if
((strValue ==
null
) || (strValue.Length > 10))
return
defValue;
float
intValue = defValue;
if
(strValue !=
null
)
{
bool
IsFloat = Regex.IsMatch(strValue,
@"^([-]|[0-9])[0-9]*(\.\w*)?$"
);
if
(IsFloat)
float
.TryParse(strValue,
out
intValue);
}
return
intValue;
}
/// <summary>
/// 将对象转换为日期时间类型
/// </summary>
/// <param name="str">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
DateTime StrToDateTime(
string
str, DateTime defValue)
{
if
(!
string
.IsNullOrEmpty(str))
{
DateTime dateTime;
if
(DateTime.TryParse(str,
out
dateTime))
return
dateTime;
}
return
defValue;
}
/// <summary>
/// 将对象转换为日期时间类型
/// </summary>
/// <param name="str">要转换的字符串</param>
/// <returns>转换后的int类型结果</returns>
public
static
DateTime StrToDateTime(
string
str)
{
return
StrToDateTime(str, DateTime.Now);
}
/// <summary>
/// 将对象转换为日期时间类型
/// </summary>
/// <param name="obj">要转换的对象</param>
/// <returns>转换后的int类型结果</returns>
public
static
DateTime ObjectToDateTime(
object
obj)
{
return
StrToDateTime(obj.ToString());
}
/// <summary>
/// 将对象转换为日期时间类型
/// </summary>
/// <param name="obj">要转换的对象</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public
static
DateTime ObjectToDateTime(
object
obj, DateTime defValue)
{
return
StrToDateTime(obj.ToString(), defValue);
}
/// <summary>
/// 替换回车换行符为html换行符
/// </summary>
public
static
string
StrFormat(
string
str)
{
string
str2;
if
(str ==
null
)
{
str2 =
""
;
}
else
{
str = str.Replace(
"\r\n"
,
"<br />"
);
str = str.Replace(
"\n"
,
"<br />"
);
str2 = str;
}
return
str2;
}
/// <summary>
/// 转换为简体中文
/// </summary>
public
static
string
ToSChinese(
string
str)
{
return
Strings.StrConv(str, VbStrConv.SimplifiedChinese, 0);
}
/// <summary>
/// 转换为繁体中文
/// </summary>
public
static
string
ToTChinese(
string
str)
{
return
Strings.StrConv(str, VbStrConv.TraditionalChinese, 0);
}
/// <summary>
/// 清除字符串数组中的重复项
/// </summary>
/// <param name="strArray">字符串数组</param>
/// <param name="maxElementLength">字符串数组中单个元素的最大长度</param>
/// <returns></returns>
public
static
string
[] DistinctStringArray(
string
[] strArray,
int
maxElementLength)
{
Hashtable h =
new
Hashtable();
foreach
(
string
s
in
strArray)
{
string
k = s;
if
(maxElementLength > 0 && k.Length > maxElementLength)
{
k = k.Substring(0, maxElementLength);
}
h[k.Trim()] = s;
}
string
[] result =
new
string
[h.Count];
h.Keys.CopyTo(result, 0);
return
result;
}
/// <summary>
/// 清除字符串数组中的重复项
/// </summary>
/// <param name="strArray">字符串数组</param>
/// <returns></returns>
public
static
string
[] DistinctStringArray(
string
[] strArray)
{
return
DistinctStringArray(strArray, 0);
}
//加密解密
public
class
GF_Encrypt
{
/// <summary>
/// DES加密
/// </summary>
/// <param name="pToEncrypt">加密字符串</param>
/// <param name="sKey">密钥</param>
/// <returns></returns>
public
static
string
string_Encrypt(
string
pToEncrypt,
string
sKey)
{
if
(pToEncrypt ==
""
)
return
""
;
if
(sKey.Length < 8) sKey = sKey +
"xuE29xWp"
;
if
(sKey.Length > 8) sKey = sKey.Substring(0, 8);
DESCryptoServiceProvider des =
new
DESCryptoServiceProvider();
//把字符串放到byte数组中
//原来使用的UTF8编码,我改成Unicode编码了,不行
byte
[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//建立加密对象的密钥和偏移量
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
//使得输入密码必须输入英文文本
des.Key = ASCIIEncoding.Default.GetBytes(sKey);
des.IV = ASCIIEncoding.Default.GetBytes(sKey);
MemoryStream ms =
new
MemoryStream();
CryptoStream cs =
new
CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
//Write the byte array into the crypto stream
//(It will end up in the memory stream)
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Get the data back from the memory stream, and into a string
StringBuilder ret =
new
StringBuilder();
foreach
(
byte
b
in
ms.ToArray())
{
//Format as hex
ret.AppendFormat(
"{0:X2}"
, b);
}
ret.ToString();
return
ret.ToString();
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="pToDecrypt">解密字符串</param>
/// <param name="sKey">解密密钥</param>
/// <param name="outstr">返回值</param>
/// <returns></returns>
public
static
bool
string_Decrypt(
string
pToDecrypt,
string
sKey,
out
string
outstr)
{
if
(pToDecrypt ==
""
)
{
outstr =
""
;
return
true
;
};
if
(sKey.Length < 8) sKey = sKey +
"xuE29xWp"
;
if
(sKey.Length > 8) sKey = sKey.Substring(0, 8);
try
{
DESCryptoServiceProvider des =
new
DESCryptoServiceProvider();
//Put the input string into the byte array
byte
[] inputByteArray =
new
byte
[pToDecrypt.Length / 2];
for
(
int
x = 0; x < pToDecrypt.Length / 2; x++)
{
int
i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (
byte
)i;
}
//建立加密对象的密钥和偏移量,此值重要,不能修改
des.Key = ASCIIEncoding.Default.GetBytes(sKey);
des.IV = ASCIIEncoding.Default.GetBytes(sKey);
MemoryStream ms =
new
MemoryStream();
CryptoStream cs =
new
CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
//Flush the data through the crypto stream into the memory stream
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//Get the decrypted data back from the memory stream
//建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
StringBuilder ret =
new
StringBuilder();
outstr = System.Text.Encoding.Default.GetString(ms.ToArray());
return
true
;
}
catch
{
outstr =
""
;
return
false
;
}
}
/// <summary>
/// 加密
/// </summary>
public
class
AES
{
//默认密钥向量
private
static
byte
[] Keys = { 0x41, 0x72, 0x65, 0x79, 0x6F, 0x75, 0x6D, 0x79, 0x53, 0x6E, 0x6F, 0x77, 0x6D, 0x61, 0x6E, 0x3F };
public
static
string
Encode(
string
encryptString,
string
encryptKey)
{
encryptKey = GF_GET.GetSubString(encryptKey, 32,
""
);
encryptKey = encryptKey.PadRight(32,
' '
);
RijndaelManaged rijndaelProvider =
new
RijndaelManaged();
rijndaelProvider.Key = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 32));
rijndaelProvider.IV = Keys;
ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor();
byte
[] inputData = Encoding.UTF8.GetBytes(encryptString);
byte
[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);
return
Convert.ToBase64String(encryptedData);
}
public
static
string
Decode(
string
decryptString,
string
decryptKey)
{
try
{
decryptKey = GF_GET.GetSubString(decryptKey, 32,
""
);
decryptKey = decryptKey.PadRight(32,
' '
);
RijndaelManaged rijndaelProvider =
new
RijndaelManaged();
rijndaelProvider.Key = Encoding.UTF8.GetBytes(decryptKey);
rijndaelProvider.IV = Keys;
ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor();
byte
[] inputData = Convert.FromBase64String(decryptString);
byte
[] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);
return
Encoding.UTF8.GetString(decryptedData);
}
catch
{
return
""
;
}
}
}
/// <summary>
/// 加密
/// </summary>
public
class
DES
{
//默认密钥向量
private
static
byte
[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public
static
string
Encode(
string
encryptString,
string
encryptKey)
{
encryptKey = GF_GET.GetSubString(encryptKey, 8,
""
);
encryptKey = encryptKey.PadRight(8,
' '
);
byte
[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte
[] rgbIV = Keys;
byte
[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP =
new
DESCryptoServiceProvider();
MemoryStream mStream =
new
MemoryStream();
CryptoStream cStream =
new
CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return
Convert.ToBase64String(mStream.ToArray());
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public
static
string
Decode(
string
decryptString,
string
decryptKey)
{
try
{
decryptKey = GF_GET.GetSubString(decryptKey, 8,
""
);
decryptKey = decryptKey.PadRight(8,
' '
);
byte
[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte
[] rgbIV = Keys;
byte
[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP =
new
DESCryptoServiceProvider();
MemoryStream mStream =
new
MemoryStream();
CryptoStream cStream =
new
CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return
Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return
""
;
}
}
}
/// <summary>
/// MD5函数
/// </summary>
/// <param name="str">原始字符串</param>
/// <returns>MD5结果</returns>
public
static
string
MD5(
string
str)
{
byte
[] b = Encoding.UTF8.GetBytes(str);
b =
new
MD5CryptoServiceProvider().ComputeHash(b);
string
ret =
""
;
for
(
int
i = 0; i < b.Length; i++)
ret += b[i].ToString(
"x"
).PadLeft(2,
'0'
);
return
ret;
}
/// <summary>
/// SHA256函数
/// </summary>
/// /// <param name="str">原始字符串</param>
/// <returns>SHA256结果</returns>
public
static
string
SHA256(
string
str)
{
byte
[] SHA256Data = Encoding.UTF8.GetBytes(str);
SHA256Managed Sha256 =
new
SHA256Managed();
byte
[] Result = Sha256.ComputeHash(SHA256Data);
return
Convert.ToBase64String(Result);
//返回长度为44字节的字符串
}
}