问题描述
如題:C#如何對任何文件加密解密,不是單純對文本文件加密解密,需對如.dll等
解决方案
解决方案二:
其实就是对数据流加密,你把文件读到流里面,然后加密流,代码网上很多
解决方案三:
http://support.microsoft.com/kb/307010/zh-cnhttp://blog.csdn.net/loundar/article/details/3138058
解决方案四:
引用2楼caozhy的回复:
http://support.microsoft.com/kb/307010/zh-cnhttp://blog.csdn.net/loundar/article/details/3138058
我有找到這些,也有寫了測試發現對.dll,.lab的文件加密后,再解密出來的文件就無法使用了...對.txt是沒問題...
解决方案五:
解密的算法有问题吧找个小一点的文件,1K左右的加密之前,分析一下byte数组解密之后,再看byte数组,看到底一致不一致
解决方案六:
不清楚,只对文件里的内容加过密,帮顶
解决方案七:
前段时间遇到过,不会,也学习下。。我只是给打了个包压缩了。。
解决方案八:
這樣寫的...publicclassEncryptKit{///<summary>///Callthisfunctiontoremovethekeyfrommemoryafteruseforsecurity///</summary>///<paramname="Destination"></param>///<paramname="Length"></param>///<returns></returns>[System.Runtime.InteropServices.DllImport("KERNEL32.DLL",EntryPoint="RtlZeroMemory")]publicstaticexternboolZeroMemory(IntPtrDestination,intLength);///<summary>///FunctiontoGeneratea64bitsKey.///</summary>///<returns>返回生成的密钥</returns>publicstaticstringGenerateKey(){//CreateaninstanceofSymetricAlgorithm.KeyandIVisgeneratedautomatically.//DESCryptoServiceProviderdesCrypto=(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();//UsetheAutomaticallygeneratedkeyforEncryption.//returnASCIIEncoding.ASCII.GetString(desCrypto.Key);byte[]key=newbyte[]{10,20,3,94,22,90,44,31};returnASCIIEncoding.UTF8.GetString(key);}///<summary>///加密文件///</summary>///<paramname="sInputFilename">要加密的文件</param>///<paramname="sOutputFilename">加密后保存的文件</param>///<paramname="sKey">密钥</param>publicstaticvoidEncryptFile(stringsInputFilename,stringsOutputFilename,stringsKey){using(FileStreamfsInput=newFileStream(sInputFilename,FileMode.Open,FileAccess.Read)){byte[]bytearrayinput=newbyte[fsInput.Length];fsInput.Read(bytearrayinput,0,bytearrayinput.Length);fsInput.Close();FileStreamfsEncrypted=newFileStream(sOutputFilename,FileMode.OpenOrCreate,FileAccess.Write);DESCryptoServiceProviderDES=newDESCryptoServiceProvider();DES.Key=ASCIIEncoding.UTF8.GetBytes(sKey);DES.IV=ASCIIEncoding.UTF8.GetBytes(sKey);ICryptoTransformdesencrypt=DES.CreateEncryptor();CryptoStreamcryptostream=newCryptoStream(fsEncrypted,desencrypt,CryptoStreamMode.Write);cryptostream.Write(bytearrayinput,0,bytearrayinput.Length);cryptostream.Close();fsEncrypted.Close();}}///<summary>//////</summary>///<paramname="sInputFilename">要解密的文件</param>///<paramname="sOutputFilename">解决后保存的文件</param>///<paramname="sKey">密钥</param>publicstaticvoidDecryptFile(stringsInputFilename,stringsOutputFilename,stringsKey){DESCryptoServiceProviderDES=newDESCryptoServiceProvider();//A64bitkeyandIVisrequiredforthisprovider.//SetsecretkeyForDESalgorithm.DES.Key=ASCIIEncoding.UTF8.GetBytes(sKey);//Setinitializationvector.DES.IV=ASCIIEncoding.UTF8.GetBytes(sKey);//Createafilestreamtoreadtheencryptedfileback.using(FileStreamfsread=newFileStream(sInputFilename,FileMode.Open,FileAccess.Read)){//CreateaDESdecryptorfromtheDESinstance.ICryptoTransformdesdecrypt=DES.CreateDecryptor();//Createcryptostreamsettoreadanddoa//DESdecryptiontransformonincomingbytes.CryptoStreamcryptostreamDecr=newCryptoStream(fsread,desdecrypt,CryptoStreamMode.Read);//Printthecontentsofthedecryptedfile.StreamWriterfsDecrypted=newStreamWriter(sOutputFilename);fsDecrypted.Write(newStreamReader(cryptostreamDecr).ReadToEnd());fsDecrypted.Flush();fsDecrypted.Close();}}}
解决方案九:
我买了一套文档,其中一个word加密打不开,求高手解密!
解决方案十:
利用对称算法加密和解密文件示例//加密文件示例protectedvoidButton1_Click(objectsender,EventArgse){stringmyFile=TextBox1.Text;stringmyPassword=TextBox2.Text;stringmyEnFile=TextBox3.Text;try{byte[]myIV={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};byte[]myKey=System.Text.Encoding.UTF8.GetBytes(myPassword);FileStreammyInStream=newFileStream(myFile,FileMode.Open,FileAccess.Read);FileStreammyOutStream=newFileStream(myEnFile,FileMode.OpenOrCreate,FileAccess.Write);myOutStream.SetLength(0);byte[]myBytes=newbyte[100];longmyInLength=0;longmyLength=myInStream.Length;DESmyProvider=newDESCryptoServiceProvider();//指定DESCryptoStreammyCryptoStream=newCryptoStream(myOutStream,myProvider.CreateEncryptor(myKey,myIV),CryptoStreamMode.Write);while(myInLength<myLength){intmylen=myInStream.Read(myBytes,0,100);myCryptoStream.Write(myBytes,0,mylen);myInLength+=mylen;}//codego.net/tags/15/1/myCryptoStream.Close();myInStream.Close();myOutStream.Close();Response.Write("<script>alert('加密文件成功!');</script>");}catch(Exceptionex){Response.Write("<script>alert('"+ex.Message+"');</script>");}}//解密示例protectedvoidButton1_Click(objectsender,EventArgse){stringstr1=TextBox1.Text;stringstrPwd=TextBox2.Text;stringstr2=TextBox3.Text;try{byte[]myIV={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};byte[]myKey=System.Text.Encoding.UTF8.GetBytes(strPwd);FileStreammyFileIn=newFileStream(str1,FileMode.Open,FileAccess.Read);FileStreammyFileOut=newFileStream(str2,FileMode.OpenOrCreate,FileAccess.Write);myFileOut.SetLength(0);byte[]myBytes=newbyte[100];longmyLength=myFileIn.Length;longmyInLength=0;DESmyProvider=newDESCryptoServiceProvider();CryptoStreammyDeStream=newCryptoStream(myFileOut,myProvider.CreateDecryptor(myKey,myIV),CryptoStreamMode.Write);while(myInLength<myLength){intmylen=myFileIn.Read(myBytes,0,100);myDeStream.Write(myBytes,0,mylen);myInLength+=mylen;}myDeStream.Close();myFileOut.Close();myFileIn.Close();Response.Write("<script>alert('解密文件成功!');</script>");}catch(Exceptionex){Response.Write("<script>alert('"+ex.Message+"');</script>");}