zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#常用字符串加密解密方法封装代码

2023-06-13 09:15:13 时间

复制代码代码如下:


//方法一
//须添加对System.Web的引用
//usingSystem.Web.Security;
///<summary>
///SHA1加密字符串
///</summary>
///<paramname="source">源字符串</param>
///<returns>加密后的字符串</returns>
publicstringSHA1(stringsource)
{
   returnFormsAuthentication.HashPasswordForStoringInConfigFile(source,"SHA1");
}
///<summary>
///MD5加密字符串
///</summary>
///<paramname="source">源字符串</param>
///<returns>加密后的字符串</returns>
publicstringMD5(stringsource)
{
   returnFormsAuthentication.HashPasswordForStoringInConfigFile(source,"MD5");;
}


//方法二(可逆加密解密):
//usingSystem.Security.Cryptography;
publicstringEncode(stringdata)
{
   byte[]byKey=System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
   byte[]byIV=System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
   DESCryptoServiceProvidercryptoProvider=newDESCryptoServiceProvider();
   inti=cryptoProvider.KeySize;
   MemoryStreamms=newMemoryStream();
   CryptoStreamcst=newCryptoStream(ms,cryptoProvider.CreateEncryptor(byKey,byIV),CryptoStreamMode.Write);
   StreamWritersw=newStreamWriter(cst);
   sw.Write(data);
   sw.Flush();
   cst.FlushFinalBlock();
   sw.Flush();
   returnConvert.ToBase64String(ms.GetBuffer(),0,(int)ms.Length);
}
publicstringDecode(stringdata)
{
   byte[]byKey=System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
   byte[]byIV=System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
   byte[]byEnc;
   try
   {
       byEnc=Convert.FromBase64String(data);
   }
   catch
   {
       returnnull;
   }
   DESCryptoServiceProvidercryptoProvider=newDESCryptoServiceProvider();
   MemoryStreamms=newMemoryStream(byEnc);
   CryptoStreamcst=newCryptoStream(ms,cryptoProvider.CreateDecryptor(byKey,byIV),CryptoStreamMode.Read);
   StreamReadersr=newStreamReader(cst);


//方法三(MD5不可逆):
//usingSystem.Security.Cryptography;
//MD5不可逆加密
//32位加密
publicstringGetMD5_32(strings,string_input_charset)
{
   MD5md5=newMD5CryptoServiceProvider();
   byte[]t=md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));
   StringBuildersb=newStringBuilder(32);
   for(inti=0;i<t.Length;i++)
   {
       sb.Append(t[i].ToString("x").PadLeft(2,"0"));
   }
   returnsb.ToString();
}
//16位加密
publicstaticstringGetMd5_16(stringConvertString)
{
   MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider();
   stringt2=BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)),4,8);
   t2=t2.Replace("-","");
   returnt2;
}


//方法四(对称加密):
//usingSystem.IO;
//usingSystem.Security.Cryptography;
privateSymmetricAlgorithmmobjCryptoService;
privatestringKey;
///<summary>  
///对称加密类的构造函数  
///</summary>  
publicSymmetricMethod()
{
   mobjCryptoService=newRijndaelManaged();
   Key="Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
}
///<summary>  
///获得密钥  
///</summary>  
///<returns>密钥</returns>  
privatebyte[]GetLegalKey()
{
   stringsTemp=Key;
   mobjCryptoService.GenerateKey();
   byte[]bytTemp=mobjCryptoService.Key;
   intKeyLength=bytTemp.Length;
   if(sTemp.Length>KeyLength)
       sTemp=sTemp.Substring(0,KeyLength);
   elseif(sTemp.Length<KeyLength)
       sTemp=sTemp.PadRight(KeyLength,"");
   returnASCIIEncoding.ASCII.GetBytes(sTemp);
}
///<summary>  
///获得初始向量IV  
///</summary>  
///<returns>初试向量IV</returns>  
privatebyte[]GetLegalIV()
{
   stringsTemp="E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
   mobjCryptoService.GenerateIV();
   byte[]bytTemp=mobjCryptoService.IV;
   intIVLength=bytTemp.Length;
   if(sTemp.Length>IVLength)
       sTemp=sTemp.Substring(0,IVLength);
   elseif(sTemp.Length<IVLength)
       sTemp=sTemp.PadRight(IVLength,"");
   returnASCIIEncoding.ASCII.GetBytes(sTemp);
}
///<summary>  
///加密方法  
///</summary>  
///<paramname="Source">待加密的串</param>  
///<returns>经过加密的串</returns>  
publicstringEncrypto(stringSource)
{
   byte[]bytIn=UTF8Encoding.UTF8.GetBytes(Source);
   MemoryStreamms=newMemoryStream();
   mobjCryptoService.Key=GetLegalKey();
   mobjCryptoService.IV=GetLegalIV();
   ICryptoTransformencrypto=mobjCryptoService.CreateEncryptor();
   CryptoStreamcs=newCryptoStream(ms,encrypto,CryptoStreamMode.Write);
   cs.Write(bytIn,0,bytIn.Length);
   cs.FlushFinalBlock();
   ms.Close();
   byte[]bytOut=ms.ToArray();
   returnConvert.ToBase64String(bytOut);
}
///<summary>  
///解密方法  
///</summary>  
///<paramname="Source">待解密的串</param>  
///<returns>经过解密的串</returns>  
publicstringDecrypto(stringSource)
{
   byte[]bytIn=Convert.FromBase64String(Source);
   MemoryStreamms=newMemoryStream(bytIn,0,bytIn.Length);
   mobjCryptoService.Key=GetLegalKey();
   mobjCryptoService.IV=GetLegalIV();
   ICryptoTransformencrypto=mobjCryptoService.CreateDecryptor();
   CryptoStreamcs=newCryptoStream(ms,encrypto,CryptoStreamMode.Read);
   StreamReadersr=newStreamReader(cs);
   returnsr.ReadToEnd();
}

//方法五:
//usingSystem.IO;
//usingSystem.Security.Cryptography;
//usingSystem.Text;
//默认密钥向量
privatestaticbyte[]Keys={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};
/**//**//**////<summary>
///DES加密字符串keleyi.com
///</summary>
///<paramname="encryptString">待加密的字符串</param>
///<paramname="encryptKey">加密密钥,要求为8位</param>
///<returns>加密成功返回加密后的字符串,失败返回源串</returns>
publicstaticstringEncryptDES(stringencryptString,stringencryptKey)
{
   try
   {
       byte[]rgbKey=Encoding.UTF8.GetBytes(encryptKey.Substring(0,8));
       byte[]rgbIV=Keys;
       byte[]inputByteArray=Encoding.UTF8.GetBytes(encryptString);
       DESCryptoServiceProviderdCSP=newDESCryptoServiceProvider();
       MemoryStreammStream=newMemoryStream();
       CryptoStreamcStream=newCryptoStream(mStream,dCSP.CreateEncryptor(rgbKey,rgbIV),CryptoStreamMode.Write);
       cStream.Write(inputByteArray,0,inputByteArray.Length);
       cStream.FlushFinalBlock();
       returnConvert.ToBase64String(mStream.ToArray());
   }
   catch
   {
       returnencryptString;
   }
}
/**//**//**////<summary>
///DES解密字符串keleyi.com
///</summary>
///<paramname="decryptString">待解密的字符串</param>
///<paramname="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
///<returns>解密成功返回解密后的字符串,失败返源串</returns>
publicstaticstringDecryptDES(stringdecryptString,stringdecryptKey)
{
   try
   {
       byte[]rgbKey=Encoding.UTF8.GetBytes(decryptKey);
       byte[]rgbIV=Keys;
       byte[]inputByteArray=Convert.FromBase64String(decryptString);
       DESCryptoServiceProviderDCSP=newDESCryptoServiceProvider();
       MemoryStreammStream=newMemoryStream();
       CryptoStreamcStream=newCryptoStream(mStream,DCSP.CreateDecryptor(rgbKey,rgbIV),CryptoStreamMode.Write);
       cStream.Write(inputByteArray,0,inputByteArray.Length);
       cStream.FlushFinalBlock();
       returnEncoding.UTF8.GetString(mStream.ToArray());
   }
   catch
   {
       returndecryptString;
   }
}


//方法六(文件加密):
//usingSystem.IO;
//usingSystem.Security.Cryptography;
//usingSystem.Text;
//加密文件
privatestaticvoidEncryptData(StringinName,StringoutName,byte[]desKey,byte[]desIV)
{
   //Createthefilestreamstohandletheinputandoutputfiles.
   FileStreamfin=newFileStream(inName,FileMode.Open,FileAccess.Read);
   FileStreamfout=newFileStream(outName,FileMode.OpenOrCreate,FileAccess.Write);
   fout.SetLength(0);
   //Createvariablestohelpwithreadandwrite.
   byte[]bin=newbyte[100];//Thisisintermediatestoragefortheencryption.
   longrdlen=0;             //Thisisthetotalnumberofbyteswritten.
   longtotlen=fin.Length;   //Thisisthetotallengthoftheinputfile.
   intlen;                    //Thisisthenumberofbytestobewrittenatatime.
   DESdes=newDESCryptoServiceProvider();
   CryptoStreamencStream=newCryptoStream(fout,des.CreateEncryptor(desKey,desIV),CryptoStreamMode.Write);
   //Readfromtheinputfile,thenencryptandwritetotheoutputfile.
   while(rdlen<totlen)
   {
       len=fin.Read(bin,0,100);
       encStream.Write(bin,0,len);
       rdlen=rdlen+len;
   }
   encStream.Close();
   fout.Close();
   fin.Close();
}
//解密文件
privatestaticvoidDecryptData(StringinName,StringoutName,byte[]desKey,byte[]desIV)
{
   //Createthefilestreamstohandletheinputandoutputfiles.
   FileStreamfin=newFileStream(inName,FileMode.Open,FileAccess.Read);
   FileStreamfout=newFileStream(outName,FileMode.OpenOrCreate,FileAccess.Write);
   fout.SetLength(0);
   //Createvariablestohelpwithreadandwrite.
   byte[]bin=newbyte[100];//Thisisintermediatestoragefortheencryption.
   longrdlen=0;             //Thisisthetotalnumberofbyteswritten.
   longtotlen=fin.Length;   //Thisisthetotallengthoftheinputfile.
   intlen;                    //Thisisthenumberofbytestobewrittenatatime.
   DESdes=newDESCryptoServiceProvider();
   CryptoStreamencStream=newCryptoStream(fout,des.CreateDecryptor(desKey,desIV),CryptoStreamMode.Write);
   //Readfromtheinputfile,thenencryptandwritetotheoutputfile.
   while(rdlen<totlen)
   {
       len=fin.Read(bin,0,100);
       encStream.Write(bin,0,len);
       rdlen=rdlen+len;
   }
   encStream.Close();
   fout.Close();
   fin.Close();
   returnsr.ReadToEnd();
}