加密解密常用函数.docx
《加密解密常用函数.docx》由会员分享,可在线阅读,更多相关《加密解密常用函数.docx(9页珍藏版)》请在冰豆网上搜索。
加密解密常用函数
本帖最后由小平于2013-6-2210:
05编辑
#regionDES加密解密
///
///DES加密
///
///待加密字串
///32位Key值
///加密后的字符串
publicstringDESEncrypt(stringstrSource)
{
returnDESEncrypt(strSource,DESKey);
}
publicstringDESEncrypt(stringstrSource,byte[]key)
{
SymmetricAlgorithmsa=Rijndael.Create();
sa.Key=key;
sa.Mode=CipherMode.ECB;
sa.Padding=PaddingMode.Zeros;
MemoryStreamms=newMemoryStream();
CryptoStreamcs=newCryptoStream(ms,sa.CreateEncryptor(),CryptoStreamMode.Write);
byte[]byt=Encoding.Unicode.GetBytes(strSource);
cs.Write(byt,0,byt.Length);
cs.FlushFinalBlock();
cs.Close();
returnConvert.ToBase64String(ms.ToArray());
}
///
///DES解密
///
///待解密的字串
///32位Key值
///解密后的字符串
publicstringDESDecrypt(stringstrSource)
{
returnDESDecrypt(strSource,DESKey);
}
publicstringDESDecrypt(stringstrSource,byte[]key)
{
SymmetricAlgorithmsa=Rijndael.Create();
sa.Key=key;
sa.Mode=CipherMode.ECB;
sa.Padding=PaddingMode.Zeros;
ICryptoTransformct=sa.CreateDecryptor();
byte[]byt=Convert.FromBase64String(strSource);
MemoryStreamms=newMemoryStream(byt);
CryptoStreamcs=newCryptoStream(ms,ct,CryptoStreamMode.Read);
StreamReadersr=newStreamReader(cs,Encoding.Unicode);
returnsr.ReadToEnd();
}
#endregion
#region一个用hash实现的加密解密方法
///
///加密
///
///
///
publicstaticstringEncryptStrByHash(stringsrc)
{
if(src.Length==0)
{
return"";
}
byte[]HaKey=System.Text.Encoding.ASCII.GetBytes((src+"Test").ToCharArray());
byte[]HaData=newbyte[20];
HMACSHA1Hmac=newHMACSHA1(HaKey);
CryptoStreamcs=newCryptoStream(Stream.Null,Hmac,CryptoStreamMode.Write);
try
{
cs.Write(HaData,0,HaData.Length);
}
finally
{
cs.Close();
}
stringHaResult=System.Convert.ToBase64String(Hmac.Hash).Substring(0,16);
byte[]RiKey=System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray());
byte[]RiDataBuf=System.Text.Encoding.ASCII.GetBytes(src.ToCharArray());
byte[]EncodedBytes= {};
MemoryStreamms=newMemoryStream();
RijndaelManagedrv=newRijndaelManaged();
cs=newCryptoStream(ms,rv.CreateEncryptor(RiKey,RiKey),CryptoStreamMode.Write);
try
{
cs.Write(RiDataBuf,0,RiDataBuf.Length);
cs.FlushFinalBlock();
EncodedBytes=ms.ToArray();
}
finally
{
ms.Close();
cs.Close();
}
returnHaResult+System.Convert.ToBase64String(EncodedBytes);
}
///
///解密
///
///
///
publicstaticstringDecrypStrByHash(stringsrc)
{
if(src.Length<40)return"";
byte[]SrcBytes=System.Convert.FromBase64String(src.Substring(16));
byte[]RiKey=System.Text.Encoding.ASCII.GetBytes(src.Substring(0,16).ToCharArray());
byte[]InitialText=newbyte[SrcBytes.Length];
RijndaelManagedrv=newRijndaelManaged();
MemoryStreamms=newMemoryStream(SrcBytes);
CryptoStreamcs=newCryptoStream(ms,rv.CreateDecryptor(RiKey,RiKey),CryptoStreamMode.Read);
try
{
cs.Read(InitialText,0,InitialText.Length);
}
finally
{
ms.Close();
cs.Close();
}
System.Text.StringBuilderResult=newSystem.Text.StringBuilder();
for(inti=0;i0)Result.Append((char)InitialText);
returnResult.ToString();
}
///
///对加密后的密文重新编码,如果密文长>16,则去掉前16个字符,如果长度小于16,返回空字符串
///
///