/// <summary>
/// 作者:李照
/// 时间:2014-06-05 15:56:23
/// </summary>
public static class EncryptionDecryption
{
#region 将byte[]数组转换为字符串
/// <summary>
/// 将byte[]数组转换为字符串,与FromBaseString()方法互逆
/// </summary>
/// <param name="inArray">需要转换的数组</param>
/// <returns>返回字符串</returns>
public static string ToBaseSting(byte[] inArray)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in inArray.ToArray())
{
sb.AppendFormat("{0:X2}", b);
}
return sb.ToString();
}
#endregion
#region 将字符串转换为byte[]数组
/// <summary>
/// 将字符串转换为byte[]数组,与ToBaseSting()方法互逆
/// </summary>
/// <param name="s">需要转换的字符串</param>
/// <returns>返回数组</returns>
public static byte[] FromBaseString(string s)
{
byte[] inputByteArray = new byte[s.Length / 2];
for (int x = 0; x < s.Length / 2; x++)
{
int i = (Convert.ToInt32(s.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
return inputByteArray;
}
#endregion
#region DES加密解密
#region 字符串加密
/// <summary>
/// DES加密--字符串
/// </summary>
/// <param name="encryptString">加密的字符串</param>
/// <param name="sKey">密钥,要求为8位数</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string DESEncrypt(string encryptString, string sKey)
{
try
{
byte[] inputByteArray = Encoding.Default.GetBytes(encryptString);
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()
{
Key = Encoding.Default.GetBytes(sKey.Substring(0, 8)),
IV = Encoding.Default.GetBytes(sKey.Substring(0, 8))
})
{
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
//ret.ToString();
return ret.ToString();
//return Convert.ToBase64String(ms.ToArray());
}
}
}
}
catch (Exception)
{
return encryptString;
}
}
#endregion
#region 字符串解密
/// <summary>
/// DES解密--字符串
/// </summary>
/// <param name="decryptString">解密字符串</param>
/// <param name="sKey">揭秘密钥,要求8位和加密时相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DESDecrypt(string decryptString, string sKey)
{
try
{
string result;
//byte[] inputByteArray = Convert.FromBase64String(decryptString);
byte[] inputByteArray = new byte[decryptString.Length / 2];
for (int x = 0; x < decryptString.Length / 2; x++)
{
int i = (Convert.ToInt32(decryptString.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()
{
Key = Encoding.Default.GetBytes(sKey.Substring(0, 8)),
IV = Encoding.Default.GetBytes(sKey.Substring(0, 8))
})
{
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
result = Encoding.Default.GetString(ms.ToArray());
}
}
}
return result;
}
catch
{
return decryptString;
}
}
#endregion
#region 文件内容加密
/// <summary>
/// 文件加密 原理:将文件A内容复制到临时文件B,对B文件流循环进行读取,并把读取的文件流加密
/// </summary>
/// <param name="inFile">加密前文件的绝对路径</param>
/// <param name="outFile">加密后文件的绝对路径</param>
/// <param name="sKey">密钥要求为8位数</param>
/// <returns>返回加密结果</returns>
public static bool DESEncryptFile(string inFile, string outFile, string sKey)
{
try
{
if (!File.Exists(inFile))
return false;
//读入流
FileStream inFs = new FileStream(inFile, FileMode.Open, FileAccess.Read);
//待写入流
FileStream outFs = new FileStream(outFile, FileMode.Open, FileAccess.Write);
outFs.SetLength(0);
byte[] byteIn = new byte[100];
long readLenght = 0;//当前读入流的长度
long readSumLenght = inFs.Length;//读入流的总长度
int everyLenght = 0;//每次读入流的长度
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()
{
Key = Encoding.Default.GetBytes(sKey.Substring(0, 8)),
IV = Encoding.Default.GetBytes(sKey.Substring(0, 8))
})
{
using (CryptoStream cs = new CryptoStream(outFs, des.CreateEncryptor(), CryptoStreamMode.Write))
{
while (readLenght < readSumLenght)
{
everyLenght = inFs.Read(byteIn, 0, 100);
cs.Write(byteIn, 0, everyLenght);
readLenght += everyLenght;
}
cs.Close();
inFs.Close();
outFs.Close();
return true;
}
}
}
catch (Exception)
{
return false;
}
}
#endregion
#region 文件内容解密
/// <summary>
/// 解密 -- 原理:将文件A内容复制到临时文件B,对B文件流循环进行读取,并把读取的文件流解密
/// </summary>
/// <param name="inFile">加密前文件的绝对路径</param>
/// <param name="outFile">加密后文件的绝对路径</param>
/// <param name="sKey">密钥要求为8位数</param>
/// <returns></returns>
public static bool DESDecryptFile(string inFile, string outFile, string sKey)
{
try
{
if (!File.Exists(inFile))
return false;
//读入流
FileStream inFs = new FileStream(inFile, FileMode.Open, FileAccess.Read);
//待写入流
FileStream outFs = new FileStream(outFile, FileMode.Open, FileAccess.Write);
outFs.SetLength(0);
byte[] byteIn = new byte[100];
long readLenght = 0;//当前读入流的长度
long readSumLenght = inFs.Length;//读入流的总长度
int everyLenght = 0;//每次读入流的长度
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()
{
Key = Encoding.Default.GetBytes(sKey.Substring(0, 8)),
IV = Encoding.Default.GetBytes(sKey.Substring(0, 8))
})
{
using (CryptoStream cs = new CryptoStream(outFs, des.CreateDecryptor(), CryptoStreamMode.Write))
{
//循环读取流
while (readLenght < readSumLenght)
{
everyLenght = inFs.Read(byteIn, 0, 100);
cs.Write(byteIn, 0, everyLenght);
readLenght += everyLenght;
}
cs.Close();
inFs.Close();
outFs.Close();
}
}
return true;
}
catch
{
return false;
}
}
#endregion
#endregion
#region RSA 加密解密
#region RSA 的密钥产成
/// <summary>
/// RSA 的密钥产生 产生私钥 和公钥
/// </summary>
/// <param name="xmlKeys"></param>
/// <param name="xmlPublicKey"></param>
public static void RSAKey(out string xmlKeys, out string xmlPublicKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
xmlKeys = rsa.ToXmlString(true);
xmlPublicKey = rsa.ToXmlString(false);
}
#endregion
#region RSA加密
/// <summary>
/// RSA加密----字符串
/// 说明KEY必须是XML的行式,返回的是字符串
/// 在有一点需要说明!!该加密方式有长度限制的!!
/// </summary>
/// <param name="encryptString">要加密的字符串</param>
/// <param name="publicKey">公钥</param>
/// <returns>加密后的字符串</returns>
public static string RSAEncrypt(string encryptString, string publicKey)
{
string result;
byte[] byteEncrypt;
byte[] byteCypher;
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKey);
byteEncrypt = (new UnicodeEncoding()).GetBytes(encryptString);
//byteEncrypt = Encoding.GetEncoding("gb2312").GetBytes(encryptString);
byteCypher = rsa.Encrypt(byteEncrypt, false);
result = Convert.ToBase64String(byteCypher);
}
catch (Exception)
{
result = encryptString;
}
return result;
}
/// <summary>
/// RSA加密----数组
/// </summary>
/// <param name="byteEncrypt">要加密的数组</param>
/// <param name="publicKey">公钥</param>
/// <returns>加密后的字符串</returns>
public static string RSAEncrypt(byte[] byteEncrypt, string publicKey)
{
string result;
byte[] byteCypher;
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKey);
byteCypher = rsa.Encrypt(byteEncrypt, false);
result = Convert.ToBase64String(byteCypher);
}
catch (Exception)
{
result = byteEncrypt.ToString();
}
return result;
}
#endregion
#region RSA解密
/// <summary>
/// RSA解密--字符串
/// </summary>
/// <param name="decryptString">要解密的字符串</param>
/// <param name="privateKey">私钥</param>
/// <returns>解密后的字符串</returns>
public static string RSADecrypt(string decryptString, string privateKey)
{
string result;
byte[] byteDecrypt;
byte[] byteDypher;
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(privateKey);
byteDecrypt = Convert.FromBase64String(decryptString);
byteDypher = rsa.Decrypt(byteDecrypt, false);
result = (new UnicodeEncoding()).GetString(byteDypher);
}
catch (Exception)
{
result = decryptString;
}
return result;
}
/// <summary>
/// RSA解密--数组
/// </summary>
/// <param name="decryptString">要解密的数组</param>
/// <param name="privateKey">私钥</param>
/// <returns>解密后的字符串</returns>
public static string RSADecrypt(byte[] byteDecrypt, string privateKey)
{
string result;
byte[] byteDypher;
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(privateKey);
byteDypher = rsa.Decrypt(byteDecrypt, false);
result = (new UnicodeEncoding()).GetString(byteDypher);
}
catch (Exception)
{
result = byteDecrypt.ToString();
}
return result;
}
#endregion
#endregion
#region RSA数字签名
#region 获取MD5的Hash描述表
/// <summary>
/// 从字符串获取MD5的Hash描述表
/// </summary>
/// <param name="stringSource">需要获取的字符串</param>
/// <param name="result">从字符串中取得MD5的Hash描述</param>
/// <returns>true 获取成功 false 获取失败</returns>
public static bool GetHash(string stringSource, ref byte[] result)
{
//从字符串中取得MD5的Hash描述
byte[] Buffer;
HashAlgorithm MD5 = HashAlgorithm.Create("MD5");
Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(stringSource);
result = MD5.ComputeHash(Buffer);
return true;
}
/// <summary>
/// 从字符串获取MD5的Hash描述表
/// </summary>
/// <param name="stringSource">需要获取的字符串</param>
/// <param name="result">从字符串中取得MD5的Hash描述 </param>
/// <returns>true 获取成功 false 获取失败</returns>
public static bool GetHash(string stringSource, ref string result)
{
//从字符串中取得MD5的Hash描述
byte[] Buffer;
byte[] HashData;
HashAlgorithm MD5 = HashAlgorithm.Create("MD5");
Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(stringSource);
HashData = MD5.ComputeHash(Buffer);
result = Convert.ToBase64String(HashData);
return true;
}
/// <summary>
/// 从文件获取MD5的Hash描述表
/// </summary>
/// <param name="objFile">需要获取的文件</param>
/// <param name="result">从文件中取得MD5的Hash描述 </param>
/// <returns>true 获取成功 false 获取失败</returns>
public static bool GetHash(FileStream objFile, ref byte[] result)
{
//从文件中取得MD5的Hash描述
HashAlgorithm MD5 = HashAlgorithm.Create("MD5");
result = MD5.ComputeHash(objFile);
objFile.Close();
return true;
}
/// <summary>
/// 从文件获取MD5的Hash描述表
/// </summary>
/// <param name="objFile">需要获取的文件</param>
/// <param name="result">从文件中取得MD5的Hash描述 </param>
/// <returns>true 获取成功 false 获取失败</returns>
public static bool GetHash(System.IO.FileStream objFile, ref string result)
{
byte[] HashData;
HashAlgorithm MD5 = HashAlgorithm.Create("MD5");
HashData = MD5.ComputeHash(objFile);
objFile.Close();
result = Convert.ToBase64String(HashData);
return true;
}
#endregion
#region RSA签名
/// <summary>
/// RSA签名
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="eSignatureString">MD5加密后的哈希描述表 字符串(签名前的数据)</param>
/// <param name="result">返回加密后签名字符串</param>
/// <returns>是否成功签名</returns>
public static bool RSASignature(string privateKey, string eSignatureString, ref string result)
{
byte[] HashbyteSignature;
byte[] EncryptedSignatureData;
try
{
HashbyteSignature = Convert.FromBase64String(eSignatureString);
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(privateKey);
RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);
//设置签名的算法为MD5
RSAFormatter.SetHashAlgorithm("MD5");
//执行签名
EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);
result = Convert.ToBase64String(EncryptedSignatureData);
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// RSA签名
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="eSignatureString">MD5加密后的哈希描述表 字符串(签名前的数据)</param>
/// <param name="result">返回加密后签名数组</param>
/// <returns>是否成功签名</returns>
public static bool RSASignature(string privateKey, string eSignatureString, ref byte[] result)
{
byte[] HashbyteSignature;
try
{
HashbyteSignature = Convert.FromBase64String(eSignatureString);
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(privateKey);
RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);
//设置签名的算法为MD5
RSAFormatter.SetHashAlgorithm("MD5");
//执行签名
result = RSAFormatter.CreateSignature(HashbyteSignature);
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// RSA签名
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="HashbyteSignature">MD5加密后的哈希描述表 数组(签名前的数据)</param>
/// <param name="result">返回加密后签名数组</param>
/// <returns>是否成功签名</returns>natureString"></param>
public static bool RSASignature(string privateKey, byte[] eSignatureString, ref byte[] result)
{
try
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(privateKey);
RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);
//设置签名的算法为MD5
RSAFormatter.SetHashAlgorithm("MD5");
//执行签名
result = RSAFormatter.CreateSignature(eSignatureString);
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// RSA签名
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="eSignatureString">MD5加密后的哈希描述表 数组(签名前的数据)</param>
/// <param name="result">返回加密后签名字符串</param>
/// <returns>是否成功签名</returns>
public static bool RSASignature(string privateKey, byte[] eSignatureString, ref string result)
{
byte[] EncryptedSignatureData;
try
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(privateKey);
RSAPKCS1SignatureFormatter RSAFormatter = new RSAPKCS1SignatureFormatter(RSA);
//设置签名的算法为MD5
RSAFormatter.SetHashAlgorithm("MD5");
//执行签名
EncryptedSignatureData = RSAFormatter.CreateSignature(eSignatureString);
result = Convert.ToBase64String(EncryptedSignatureData);
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region RSA 签名验证
/// <summary>
/// RSA 签名验证
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="dSignatureString">MD5加密后的哈希描述表 字符串(签名前的数据)</param>
/// <param name="dSignatureData">需要验证的签名数据 字符串 (签名后的数据)</param>
/// <returns>验证结果 true 验证成功 false 验证失败</returns>
public static bool RSASignatureValidation(string publicKey, string dSignatureString, string dSignatureData)
{
byte[] DeformatterData;
byte[] HashbyteDeformatter;
HashbyteDeformatter = Convert.FromBase64String(dSignatureString);
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(publicKey);
RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
//指定解密的时候HASH算法为MD5
RSADeformatter.SetHashAlgorithm("MD5");
DeformatterData = Convert.FromBase64String(dSignatureData);
if (RSADeformatter.VerifySignature(HashbyteDeformatter, DeformatterData))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// RSA 签名验证
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="dSignatureString">MD5加密后的哈希描述表 数组(签名前的数据)</param>
/// <param name="dSignatureData">需要验证的签名数据 字符串 (签名后的数据)</param>
/// <returns>验证结果 true 验证成功 false 验证失败</returns>
public static bool RSASignatureValidation(string publicKey, byte[] dSignatureString, string dSignatureData)
{
byte[] DeformatterData;
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(publicKey);
RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
//指定解密的时候HASH算法为MD5
RSADeformatter.SetHashAlgorithm("MD5");
DeformatterData = Convert.FromBase64String(dSignatureData);
if (RSADeformatter.VerifySignature(dSignatureString, DeformatterData))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// RSA 签名验证
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="dSignatureString">MD5加密后的哈希描述表 数组(签名前的数据)</param>
/// <param name="dSignatureData">需要验证的签名数据 数组 (签名后的数据)</param>
/// <returns>验证结果 true 验证成功 false 验证失败</returns>
public static bool RSASignatureValidation(string publicKey, byte[] dSignatureString, byte[] dSignatureData)
{
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(publicKey);
RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
//指定解密的时候HASH算法为MD5
RSADeformatter.SetHashAlgorithm("MD5");
if (RSADeformatter.VerifySignature(dSignatureString, dSignatureData))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// RSA 签名验证
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="dSignatureString">MD5加密后的哈希描述表 字符串(签名前的数据)</param>
/// <param name="dSignatureData">需要验证的签名数据 数组 (签名后的数据)</param>
/// <returns>验证结果 true 验证成功 false 验证失败</returns>
public static bool RSASignatureValidation(string publicKey, string dSignatureString, byte[] dSignatureData)
{
byte[] HashbyteDeformatter;
HashbyteDeformatter = Convert.FromBase64String(dSignatureString);
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSA.FromXmlString(publicKey);
RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(RSA);
//指定解密的时候HASH算法为MD5
RSADeformatter.SetHashAlgorithm("MD5");
if (RSADeformatter.VerifySignature(HashbyteDeformatter, dSignatureData))
{
return true;
}
else
{
return false;
}
}
#endregion
#endregion
#region MD5加密
/// <summary>
/// MD5加密
/// </summary>
/// <param name="encryptString">加密的字符串或文件绝对路径</param>
/// <param name="encryptType">加密类型:1 字符串 2 程序or文件</param>
/// <param name="encryptLength">加密的长度1 16位 2 32位</param>
/// <param name="result"></param>
/// <returns></returns>
public static bool MD5Encrypt(string encryptString, int encryptType, int encryptLength, ref string result)
{
try
{
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
switch (encryptLength)
{
case 1:
if (encryptType == 1)
{
result = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(encryptString)), 4, 8).Replace("-", "");
}
else if (encryptType == 2)
{
FileStream file = File.OpenRead(encryptString);
byte[] hash = md5.ComputeHash(file);
result = System.BitConverter.ToString(hash, 4, 8).Replace("-", "");
}
break;
case 2:
if (encryptType == 1)
{
result = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(encryptString))).Replace("-", "");
}
else if (encryptType == 2)
{
FileStream file = File.OpenRead(encryptString);
byte[] hash = md5.ComputeHash(file);
result = System.BitConverter.ToString(hash).Replace("-", "");
}
break;
default:
break;
}
}
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region SHA加密
/// <summary>
/// SHA加密
/// </summary>
/// <param name="encryptString">需要加密的字符串</param>
/// <param name="encryptLength">加密的长度 1 输出160bit SHA256输出256bit SHA384输出384bit SHA512输出512bit</param>
/// <param name="result">加密后的字符串</param>
/// <returns>返回加密结果 true 加密成功 false 加密失败</returns>
public static bool SHAEncrypt(string encryptString, int encryptLength, ref string result)
{
byte[] resultByte;
byte[] encryptByte = Encoding.UTF8.GetBytes(encryptString); ;
try
{
switch (encryptLength)
{
case 1:
using (SHA1Managed sha = new SHA1Managed())
{
resultByte = sha.ComputeHash(encryptByte);
result = Convert.ToBase64String(resultByte);
}
break;
case 256:
using (SHA256Managed sha = new SHA256Managed())
{
resultByte = sha.ComputeHash(encryptByte);
result = Convert.ToBase64String(resultByte);
}
break;
case 384:
using (SHA384Managed sha = new SHA384Managed())
{
resultByte = sha.ComputeHash(encryptByte);
result = Convert.ToBase64String(resultByte);
}
break;
case 512:
using (SHA512Managed sha = new SHA512Managed())
{
resultByte = sha.ComputeHash(encryptByte);
result = Convert.ToBase64String(resultByte);
}
break;
default:
break;
}
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// SHA加密
/// </summary>
/// <param name="encryptString">需要加密的数组</param>
/// <param name="encryptLength">加密的长度 1 输出160bit SHA256输出256bit SHA384输出384bit SHA512输出512bit</param>
/// <param name="result">加密后的字符串</param>
/// <returns>返回加密结果 true 加密成功 false 加密失败</returns>
public static bool SHAEncrypt(byte[] encryptString, int encryptLength, ref string result)
{
byte[] resultByte;
try
{
switch (encryptLength)
{
case 1:
using (SHA1Managed sha = new SHA1Managed())
{
resultByte = sha.ComputeHash(encryptString);
result = Convert.ToBase64String(resultByte);
}
break;
case 256:
using (SHA256Managed sha = new SHA256Managed())
{
resultByte = sha.ComputeHash(encryptString);
result = Convert.ToBase64String(resultByte);
}
break;
case 384:
using (SHA384Managed sha = new SHA384Managed())
{
resultByte = sha.ComputeHash(encryptString);
result = Convert.ToBase64String(resultByte);
}
break;
case 512:
using (SHA512Managed sha = new SHA512Managed())
{
resultByte = sha.ComputeHash(encryptString);
result = Convert.ToBase64String(resultByte);
}
break;
default:
break;
}
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// SHA加密
/// </summary>
/// <param name="encryptString">需要加密的字符串</param>
/// <param name="encryptLength">加密的长度 1 输出160bit SHA256输出256bit SHA384输出384bit SHA512输出512bit</param>
/// <param name="result">加密后的数组</param>
/// <returns>返回加密结果 true 加密成功 false 加密失败</returns>
public static bool SHAEncrypt(string encryptString, int encryptLength, ref byte[] result)
{
byte[] encryptByte = Encoding.UTF8.GetBytes(encryptString); ;
try
{
switch (encryptLength)
{
case 1:
using (SHA1Managed sha = new SHA1Managed())
{
result = sha.ComputeHash(encryptByte);
}
break;
case 256:
using (SHA256Managed sha = new SHA256Managed())
{
result = sha.ComputeHash(encryptByte);
}
break;
case 384:
using (SHA384Managed sha = new SHA384Managed())
{
result = sha.ComputeHash(encryptByte);
}
break;
case 512:
using (SHA512Managed sha = new SHA512Managed())
{
result = sha.ComputeHash(encryptByte);
}
break;
default:
break;
}
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// SHA加密
/// </summary>
/// <param name="encryptString">需要加密的数组</param>
/// <param name="encryptLength">加密的长度 1 输出160bit SHA256输出256bit SHA384输出384bit SHA512输出512bit</param>
/// <param name="result">加密后的数组</param>
/// <returns>返回加密结果 true 加密成功 false 加密失败</returns>
public static bool SHAEncrypt(byte[] encryptString, int encryptLength, ref byte[] result)
{
try
{
switch (encryptLength)
{
case 1:
using (SHA1Managed sha = new SHA1Managed())
{
result = sha.ComputeHash(encryptString);
}
break;
case 256:
using (SHA256Managed sha = new SHA256Managed())
{
result = sha.ComputeHash(encryptString);
}
break;
case 384:
using (SHA384Managed sha = new SHA384Managed())
{
result = sha.ComputeHash(encryptString);
}
break;
case 512:
using (SHA512Managed sha = new SHA512Managed())
{
result = sha.ComputeHash(encryptString);
}
break;
default:
break;
}
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
}