mysql对称加密_使用Aes对称加密解密Web.Config数据库连接串

usingOrg.BouncyCastle.Asn1.Pkcs;usingOrg.BouncyCastle.Asn1.X509;usingOrg.BouncyCastle.Crypto.Parameters;usingOrg.BouncyCastle.Math;usingOrg.BouncyCastle.Pkcs;usingOrg.BouncyCastle.Security;usingOrg.BouncyCastle.X509;usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.Security.Cryptography;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Xml;namespaceHema.Framework.Core

{public classEncryptUtility

{#region AES

///

///AES加密///

/// 要加密的字符

/// 对应的密钥(不可为中文,不能超过32个字符,超过32个字符的截取前32个字符)

/// 返回Base64格式的字符串

public static string AESEncrypt(string encryptString, string encryptKey, string vector = null)

{if (string.IsNullOrEmpty(encryptString))

{throw new ArgumentNullException("参数encryptString为空!");

}if (string.IsNullOrEmpty(encryptKey))

{throw new ArgumentNullException("参数encryptKey为空!");

}if (encryptKey.Length > 32)

encryptKey= encryptKey.Substring(0, 32);if (encryptKey.Length < 32)

encryptKey= encryptKey.PadRight(32, '0');

RijndaelManaged rijndaelProvider= newRijndaelManaged();

rijndaelProvider.Key=Encoding.UTF8.GetBytes(encryptKey);if (string.IsNullOrEmpty(vector))

{

rijndaelProvider.Mode=CipherMode.ECB;

}else{

rijndaelProvider.IV=Encoding.UTF8.GetBytes(vector);

}

rijndaelProvider.Padding= PaddingMode.PKCS7; //填充模式

ICryptoTransform rijndaelEncrypt =rijndaelProvider.CreateEncryptor();byte[] inputData =Encoding.UTF8.GetBytes(encryptString);byte[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);returnConvert.ToBase64String(encryptedData);

}///

///AES解密///

/// 要解密的字符(该字符必须是已经加密过的Base64格式的字符串)

/// 解密的密钥,该密钥要和加密的密钥一致(不可为中文,不能超过32个字符,超过32个字符的截取前32个字符)

/// 解密后的字符串

public static string AESDecrypt(string decryptString, string decryptKey, string vector = null)

{if (string.IsNullOrEmpty(decryptString))

{throw new ArgumentNullException("参数encryptString为空!");

}if (string.IsNullOrEmpty(decryptKey))

{throw new ArgumentNullException("参数encryptKey为空!");

}if (decryptKey.Length > 32)

decryptKey= decryptKey.Substring(0, 32);if (decryptKey.Length < 32)

decryptKey= decryptKey.PadRight(32, '0');try{

RijndaelManaged rijndaelProvider= newRijndaelManaged();

rijndaelProvider.Key=Encoding.UTF8.GetBytes(decryptKey);if (string.IsNullOrEmpty(vector))

{

rijndaelProvider.Mode=CipherMode.ECB;

}else{

rijndaelProvider.IV=Encoding.UTF8.GetBytes(vector);

}

rijndaelProvider.Padding= PaddingMode.PKCS7; //填充模式

ICryptoTransform rijndaelDecrypt =rijndaelProvider.CreateDecryptor();byte[] inputData =Convert.FromBase64String(decryptString);byte[] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);returnEncoding.UTF8.GetString(decryptedData);

}catch{return string.Empty;

}

}///

///加密文件流///

///

///

public static CryptoStream AES_EncryptStrream(FileStream fs, string decryptKey, stringvector)

{

decryptKey= GetSubString(decryptKey, 32, "");

decryptKey= decryptKey.PadRight(32, ' ');

RijndaelManaged rijndaelProvider= newRijndaelManaged();

rijndaelProvider.Key=Encoding.UTF8.GetBytes(decryptKey);

rijndaelProvider.IV=Encoding.UTF8.GetBytes(vector);

ICryptoTransform encrypto=rijndaelProvider.CreateEncryptor();

CryptoStream cytptostreamEncr= newCryptoStream(fs, encrypto, CryptoStreamMode.Write);returncytptostreamEncr;

}///

///解密文件流///

///

///

public static CryptoStream AES_DecryptStream(FileStream fs, string decryptKey, stringvector)

{

decryptKey= GetSubString(decryptKey, 32, "");

decryptKey= decryptKey.PadRight(32, ' ');

RijndaelManaged rijndaelProvider= newRijndaelManaged();

rijndaelProvider.Key=Encoding.UTF8.GetBytes(decryptKey);

rijndaelProvider.IV=Encoding.UTF8.GetBytes(vector);

ICryptoTransform Decrypto=rijndaelProvider.CreateDecryptor();

CryptoStream cytptostreamDecr= newCryptoStream(fs, Decrypto, CryptoStreamMode.Read);returncytptostreamDecr;

}///

///对指定文件加密///

///

///

///

public static bool AES_EncryptFile(string InputFile, string OutputFile, stringvector)

{try{string decryptKey = "www.iqidi.com";

FileStream fr= newFileStream(InputFile, FileMode.Open);

FileStream fren= newFileStream(OutputFile, FileMode.Create);

CryptoStream Enfr=AES_EncryptStrream(fren, decryptKey, vector);byte[] bytearrayinput = new byte[fr.Length];

fr.Read(bytearrayinput,0, bytearrayinput.Length);

Enfr.Write(bytearrayinput,0, bytearrayinput.Length);

Enfr.Close();

fr.Close();

fren.Close();

}catch{//文件异常

return false;

}return true;

}///

///对指定的文件解压缩///

///

///

///

public static bool AES_DecryptFile(string InputFile, string OutputFile, stringvector)

{try{string decryptKey = "www.iqidi.com";

FileStream fr= newFileStream(InputFile, FileMode.Open);

FileStream frde= newFileStream(OutputFile, FileMode.Create);

CryptoStream Defr=AES_DecryptStream(fr, decryptKey, vector);byte[] bytearrayoutput = new byte[1024];int m_count = 0;do{

m_count= Defr.Read(bytearrayoutput, 0, bytearrayoutput.Length);

frde.Write(bytearrayoutput,0, m_count);if (m_count

}while (true);

Defr.Close();

fr.Close();

frde.Close();

}catch{//文件异常

return false;

}return true;

}///

///按字节长度(按字节,一个汉字为2个字节)取得某字符串的一部分///

/// 源字符串

/// 所取字符串字节长度

/// 附加字符串(当字符串不够长时,尾部所添加的字符串,一般为"...")

/// 某字符串的一部分

private static string GetSubString(string sourceString, int length, stringtailString)

{return GetSubString(sourceString, 0, length, tailString);

}///

///按字节长度(按字节,一个汉字为2个字节)取得某字符串的一部分///

/// 源字符串

/// 索引位置,以0开始

/// 所取字符串字节长度

/// 附加字符串(当字符串不够长时,尾部所添加的字符串,一般为"...")

/// 某字符串的一部分

private static string GetSubString(string sourceString, int startIndex, int length, stringtailString)

{string myResult =sourceString;//当是日文或韩文时(注:中文的范围:\u4e00 - \u9fa5, 日文在\u0800 - \u4e00, 韩文为\xAC00-\xD7A3)

if (System.Text.RegularExpressions.Regex.IsMatch(sourceString, "[\u0800-\u4e00]+") ||System.Text.RegularExpressions.Regex.IsMatch(sourceString,"[\xAC00-\xD7A3]+"))

{//当截取的起始位置超出字段串长度时

if (startIndex >=sourceString.Length)

{return string.Empty;

}else{returnsourceString.Substring(startIndex,

((length+ startIndex) > sourceString.Length) ? (sourceString.Length -startIndex) : length);

}

}//中文字符,如"中国人民abcd123"

if (length <= 0)

{return string.Empty;

}byte[] bytesSource =Encoding.Default.GetBytes(sourceString);//当字符串长度大于起始位置

if (bytesSource.Length >startIndex)

{int endIndex =bytesSource.Length;//当要截取的长度在字符串的有效长度范围内

if (bytesSource.Length > (startIndex +length))

{

endIndex= length +startIndex;

}else{//当不在有效范围内时,只取到字符串的结尾

length = bytesSource.Length -startIndex;

tailString= "";

}int[] anResultFlag = new int[length];int nFlag = 0;//字节大于127为双字节字符

for (int i = startIndex; i < endIndex; i++)

{if (bytesSource[i] > 127)

{

nFlag++;if (nFlag == 3)

{

nFlag= 1;

}

}else{

nFlag= 0;

}

anResultFlag[i]=nFlag;

}//最后一个字节为双字节字符的一半

if ((bytesSource[endIndex - 1] > 127) && (anResultFlag[length - 1] == 1))

{

length= length + 1;

}byte[] bsResult = new byte[length];

Array.Copy(bytesSource, startIndex, bsResult,0, length);

myResult=Encoding.Default.GetString(bsResult);

myResult= myResult +tailString;returnmyResult;

}return string.Empty;

}#endregion}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值