C#加密解密总结.doc

上传人:jian****018 文档编号:7896925 上传时间:2020-03-25 格式:DOC 页数:13 大小:57KB
返回 下载 相关 举报
C#加密解密总结.doc_第1页
第1页 / 共13页
C#加密解密总结.doc_第2页
第2页 / 共13页
C#加密解密总结.doc_第3页
第3页 / 共13页
点击查看更多>>
资源描述
【转】C#加密解密总结 ASCIIEncoding.ASCII.GetBytes(sKey); 这里的sKey必须是8位英文字母。/须添加对System.Web的引用usingSystem.Web.Security;./SHA1加密字符串/源字符串/加密后的字符串publicstringSHA1(stringsource)returnFormsAuthentication.HashPasswordForStoringInConfigFile(source,SHA1);/MD5加密字符串/源字符串/加密后的字符串publicstringMD5(stringsource)returnFormsAuthentication.HashPasswordForStoringInConfigFile(source,MD5);方法二(可逆加密解密):usingSystem.Security.Cryptography;.publicstringEncode(stringdata)bytebyKey=System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);bytebyIV=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)bytebyKey=System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);bytebyIV=System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);bytebyEnc;trybyEnc=Convert.FromBase64String(data);catchreturnnull;DESCryptoServiceProvidercryptoProvider=newDESCryptoServiceProvider();MemoryStreamms=newMemoryStream(byEnc);CryptoStreamcst=newCryptoStream(ms,cryptoProvider.CreateDecryptor(byKey,byIV),CryptoStreamMode.Read);StreamReadersr=newStreamReader(cst);returnsr.ReadToEnd();方法三(MD5不可逆):usingSystem.Security.Cryptography;./MD5不可逆加密/32位加密publicstringGetMD5_32(strings,string_input_charset)MD5md5=newMD5CryptoServiceProvider();bytet=md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s);StringBuildersb=newStringBuilder(32);for(inti=0;it.Length;i+)sb.Append(ti.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;/对称加密类的构造函数/publicSymmetricMethod()mobjCryptoService=newRijndaelManaged();Key=Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7;/获得密钥/密钥privatebyteGetLegalKey()stringsTemp=Key;mobjCryptoService.GenerateKey();bytebytTemp=mobjCryptoService.Key;intKeyLength=bytTemp.Length;if(sTemp.LengthKeyLength)sTemp=sTemp.Substring(0,KeyLength);elseif(sTemp.LengthKeyLength)sTemp=sTemp.PadRight(KeyLength,);returnASCIIEncoding.ASCII.GetBytes(sTemp);/获得初始向量IV/初试向量IVprivatebyteGetLegalIV()stringsTemp=E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk;mobjCryptoService.GenerateIV();bytebytTemp=mobjCryptoService.IV;intIVLength=bytTemp.Length;if(sTemp.LengthIVLength)sTemp=sTemp.Substring(0,IVLength);elseif(sTemp.LengthIVLength)sTemp=sTemp.PadRight(IVLength,);returnASCIIEncoding.ASCII.GetBytes(sTemp);/加密方法/待加密的串/经过加密的串publicstringEncrypto(stringSource)bytebytIn=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();bytebytOut=ms.ToArray();returnConvert.ToBase64String(bytOut);/解密方法/待解密的串/经过解密的串publicstringDecrypto(stringSource)bytebytIn=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;./默认密钥向量privatestaticbyteKeys=0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF;/*/*/*/DES加密字符串/待加密的字符串/加密密钥,要求为8位/加密成功返回加密后的字符串,失败返回源串publicstaticstringEncryptDES(stringencryptString,stringencryptKey)trybytergbKey=Encoding.UTF8.GetBytes(encryptKey.Substring(0,8);bytergbIV=Keys;byteinputByteArray=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();catchreturnencryptString;/*/*/*/DES解密字符串/待解密的字符串/解密密钥,要求为8位,和加密密钥相同/解密成功返回解密后的字符串,失败返源串publicstaticstringDecryptDES(stringdecryptString,stringdecryptKey)trybytergbKey=Encoding.UTF8.GetBytes(decryptKey);bytergbIV=Keys;byteinputByteArray=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();catchreturndecryptString;方法六(文件加密):usingSystem.IO;usingSystem.Security.Cryptography;usingSystem.Text;./加密文件privatestaticvoidEncryptData(StringinName,StringoutName,bytedesKey,bytedesIV)/Createthefilestreamstohandletheinputandoutputfiles.FileStreamfin=newFileStream(inName,FileMode.Open,FileAccess.Read);FileStreamfout=newFileStream(outName,FileMode.OpenOrCreate,FileAccess.Write);fout.SetLength(0);/Createvariablestohelpwithreadandwrite.bytebin=newbyte100;/Thisisintermediatestoragefortheencryption.longrdlen=0;/Thisisthetotalnumberofbyteswritten.longtotlen=fin.Length;/Thisisthetotallengthoftheinputfile.intlen;/Thisisthenumberofbytestobewrittenatatime.DESdes=newDESCryptoServiceProvider();CryptoStreamencStream=newCryptoStream(fout,des.CreateEncryptor(desKey,desIV),CryptoStreamMode.Write);/Readfromtheinputfile,thenencryptandwritetotheoutputfile.while(rdlentotlen)len=fin.Read(bin,0,100);encStream.Write(bin,0,len);rdlen=rdlen+len;encStream.Close();fout.Close();fin.Close();/解密文件privatestaticvoidDecryptData(StringinName,StringoutName,bytedesKey,bytedesIV)/Createthefilestreamstohandletheinputandoutputfiles.FileStreamfin=newFileStream(inName,FileMode.Open,FileAccess.Read);FileStreamfout=newFileStream(outName,FileMode.OpenOrCreate,FileAccess.Write);fout.SetLength(0);/Createvariablestohelpwithreadandwrite.bytebin=newbyte100;/Thisisintermediatestoragefortheencryption.longrdlen=0;/Thisisthetotalnumberofbyteswritten.longtotlen=fin.Length;/Thisisthetotallengthoftheinputfile.intlen;/Thisisthenumberofbytestobewrittenatatime.DESdes=newDESCryptoServiceProvider();CryptoStreamencStream=newCryptoStream(fout,des.CreateDecryptor(desKey,desIV),CryptoStreamMode.Write);/Readfromtheinputfile,thenencryptandwritetotheoutputfile.while(rdlentotlen)len=fin.Read(bin,0,100);encStream.Write(bin,0,len);rdlen=rdlen+len;encStream.Close();fout.Close();fin.Close();分享到:-C#-/名称空间usingSystem;usingSystem.Security.Cryptography;usingSystem.IO;usingSystem.Text;/方法/加密方法publicstringEncrypt(stringpToEncrypt,stringsKey)DESCryptoServiceProviderdes=newDESCryptoServiceProvider();/把字符串放到byte数组中/原来使用的UTF8编码,我改成Unicode编码了,不行byteinputByteArray=Encoding.Default.GetBytes(pToEncrypt);/byteinputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);/建立加密对象的密钥和偏移量/原文使用ASCIIEncoding.ASCII方法的GetBytes方法/使得输入密码必须输入英文文本des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);MemoryStreamms=newMemoryStream();CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);/Writethebytearrayintothecryptostream/(Itwillendupinthememorystream)cs.Write(inputByteArray,0,inputByteArray.Length);cs.FlushFinalBlock();/Getthedatabackfromthememorystream,andintoastringStringBuilderret=newStringBuilder();foreach(bytebinms.ToArray()/Formatashexret.AppendFormat(0:X2,b);ret.ToString();returnret.ToString();/解密方法publicstringDecrypt(stringpToDecrypt,stringsKey)DESCryptoServiceProviderdes=newDESCryptoServiceProvider();/PuttheinputstringintothebytearraybyteinputByteArray=newbytepToDecrypt.Length/2;for(intx=0;xpToDecrypt.Length/2;x+)inti=(Convert.ToInt32(pToDecrypt.Substring(x*2,2),16);inputByteArrayx=(byte)i;/建立加密对象的密钥和偏移量,此值重要,不能修改des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);MemoryStreamms=newMemoryStream();CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);/Flushthedatathroughthecryptostreamintothememorystreamcs.Write(inputByteArray,0,inputByteArray.Length);cs.FlushFinalBlock();/Getthedecrypteddatabackfromthememorystream/建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象StringBuilderret=newStringBuilder();returnSystem.Text.Encoding.Default.GetString(ms.ToArray();-vb.Net:-ImportsSystem.Web.SecurityImportsSystem.SecurityImportsSystem.Security.CryptographyImportsSystem.TextPublicSharedFunctionEncrypt(ByValpToEncryptAsString,ByValsKeyAsString)AsStringDimdesAsNewDESCryptoServiceProvider()DiminputByteArray()AsByteinputByteArray=Encoding.Default.GetBytes(pToEncrypt)建立加密对象的密钥和偏移量原文使用ASCIIEncoding.ASCII方法的GetBytes方法使得输入密码必须输入英文文本des.Key=ASCIIEncoding.ASCII.GetBytes(sKey)des.IV=ASCIIEncoding.ASCII.GetBytes(sKey)写二进制数组到加密流(把内存流中的内容全部写入)DimmsAsNewSystem.IO.MemoryStream()DimcsAsNewCryptoStream(ms,des.CreateEncryptor,CryptoStreamMode.Write)写二进制数组到加密流(把内存流中的内容全部写入)cs.Write(inputByteArray,0,inputByteArray.Length)cs.FlushFinalBlock()建立输出字符串DimretAsNewStringBuilder()DimbAsByteForEachbInms.ToArray()ret.AppendFormat(0:X2,b)NextReturnret.ToString()EndFunction解密方法PublicSharedFunctionDecrypt(ByValpToDecryptAsString,ByValsKeyAsString)AsStringDimdesAsNewDESCryptoServiceProvider()把字符串放入byte数组DimlenAsIntegerlen=pToDecrypt.Length/2-1DiminputByteArray(len)AsByteDimx,iAsIntegerForx=0Toleni=Convert.ToInt32(pToDecrypt.Substring(x*2,2),16)inputByteArray(x)=CType(i,Byte)Next建立加密对象的密钥和偏移量,此值重要,不能修改des.Key=ASCIIEncoding.ASCII.GetBytes(sKey)des.IV=ASCIIEncoding.ASCII.GetBytes(sKey)DimmsAsNewSystem.IO.MemoryStream()DimcsAsNewCryptoStream(ms,des.CreateDecryptor,CryptoStreamMode.Write)cs.Write(inputByteArray,0,inputByteArray.Length)cs.FlushFinalBlock()ReturnEncoding.Default.GetString(ms.ToArray)EndFunction-备注:1.sKey输入密码的时候,必须使用英文字符,区分大小写,且字符数量是8个,不能多也不能少,否则出错。2.本人asp.net1.1,vs.net2003,windows2003server环境下C#和vb.net分别调试成功!第二種:usingSystem;usingSystem.IO;usingSystem.Security.Cryptography;usingSystem.Text;namespacewebrptdata/对称加密算法类/publicclassSymmetricMethodprivateSymmetricAlgorithmmobjCryptoService;privatestringKey;/对称加密类的构造函数/publicSymmetricMethod()mobjCryptoService=newRijndaelManaged();Key=Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7;/获得密钥/密钥privatebyteGetLegalKey()stringsTemp=Key;mobjCryptoService.GenerateKey();bytebytTemp=mobjCryptoService.Key;intKeyLength=bytTemp.Length;if(sTemp.LengthKeyLength)sTemp=sTemp.Substring(0,KeyLength);elseif(sTemp.LengthKeyLength)sTemp=sTemp.PadRight(KeyLength,);returnASCIIEncoding.ASCII.GetBytes(sTemp);/获得初始向量IV/初试向量IVprivatebyteGetLegalIV()stringsTemp=E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk;mobjCryptoService.GenerateIV();bytebytTemp=mobjCryptoService.IV;intIVLength=bytTemp.Length;if(sTemp.LengthIVLength)sTemp=sTemp.Substring(0,IVLength);elseif(sTemp.LengthIVLength)sTemp=sTemp.PadRight(IVLength,);returnASCIIEncoding.ASCII.GetBytes(sTemp);/加密方法/待加密的串/经过加密的串publicstringEncrypto(stringSource)bytebytIn=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();bytebytOut=ms.ToArray();returnConvert.ToBase64String(bytOut);/解密方法/待解密的串/经过解密的串publicstringDecrypto(stringSource)bytebytIn=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();
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!