问题描述
staticvoidMain(string[]args){//加密之前的字符串:http://www.dtcms.net/upgrade.ashx?u={0}&i={1}&v={2}//然而我没对“http://www.dtcms.net/upgrade.ashx?u={0}&i={1}&v={2}”此字符串进行加密,可我可以从下面的代码运行之后解密出字符串//"785528A58C55A6F7D9669B9534635E6070A99BE42E445E552F9F66FAA55F9FB376357C467EBF7F7E3B3FC77F37866FEFB0237D95CCCE157A";//以上字符串是从“http://www.dtcms.net/upgrade.ashx?u={0}&i={1}&v={2}”字符串加密而来的,其中密钥为“Key”//key密钥stringkey="Key";stringstr1=@"785528A58C55A6F7D9669B9534635E6070A99BE42E445E552F9F66FAA55F9FB376357C467EBF7F7E3B3FC77F37866FEFB0237D95CCCE157A";//str1是从某个CMS中找到的加密字符串,可为什么我都没有对该字符串进行加密stringstr2=DESEn.Decrypt(str1,key);//Console.WriteLine("解密后的字符串:"+str2);//问题是我实在搞不懂我没有对“http://www.dtcms.net/upgrade.ashx?u={0}&i={1}&v={2}”加密,怎么用密钥为:“Key”,//字符串为str1的加密字符串,能解密出str2原始字符串}
//以下是加密和解密方法///<summary>///加密数据///</summary>///<paramname="Text"></param>///<paramname="sKey"></param>///<returns></returns>publicstaticstringEncrypt(stringText,stringsKey){DESCryptoServiceProviderdes=newDESCryptoServiceProvider();byte[]inputByteArray;inputByteArray=Encoding.Default.GetBytes(Text);des.Key=ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,"md5").Substring(0,8));des.IV=ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,"md5").Substring(0,8));System.IO.MemoryStreamms=newSystem.IO.MemoryStream();CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);cs.Write(inputByteArray,0,inputByteArray.Length);cs.FlushFinalBlock();StringBuilderret=newStringBuilder();foreach(bytebinms.ToArray()){ret.AppendFormat("{0:X2}",b);}returnret.ToString();}
///<summary>///加密数据///</summary>///<paramname="Text"></param>///<paramname="sKey"></param>///<returns></returns>publicstaticstringEncrypt(stringText,stringsKey){DESCryptoServiceProviderdes=newDESCryptoServiceProvider();byte[]inputByteArray;inputByteArray=Encoding.Default.GetBytes(Text);des.Key=ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,"md5").Substring(0,8));des.IV=ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey,"md5").Substring(0,8));System.IO.MemoryStreamms=newSystem.IO.MemoryStream();CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);cs.Write(inputByteArray,0,inputByteArray.Length);cs.FlushFinalBlock();StringBuilderret=newStringBuilder();foreach(bytebinms.ToArray()){ret.AppendFormat("{0:X2}",b);}returnret.ToString();}
解决方案
解决方案二:
Key是一个密钥,加密和解密的密钥必须相同才能解密。
解决方案三:
我现在不关心加密和解密的密钥是否相同,而是我根本没进行加密,直接可以解密,stringkey="Key";stringstr1=@"785528A58C55A6F7D9669B9534635E6070A99BE42E445E552F9F66FAA55F9FB376357C467EBF7F7E3B3FC77F37866FEFB0237D95CCCE157A";//str1是从某个CMS中找到的加密字符串,可为什么我都没有对该字符串进行加密stringstr2=DESEn.Decrypt(str1,key);//Console.WriteLine("解密后的字符串:"+str2);这个程序最后输出的是“解密后的字符串:http://www.dtcms.net/upgrade.ashx?u={0}&i={1}&v={2}”
解决方案四:
引用1楼guwei4037的回复:
Key是一个密钥,加密和解密的密钥必须相同才能解密。
我现在不关心加密和解密的密钥是否相同,而是我根本没进行加密,直接可以解密,stringkey="Key";stringstr1=@"785528A58C55A6F7D9669B9534635E6070A99BE42E445E552F9F66FAA55F9FB376357C467EBF7F7E3B3FC77F37866FEFB0237D95CCCE157A";//str1是从某个CMS中找到的加密字符串,可为什么我都没有对该字符串进行加密stringstr2=DESEn.Decrypt(str1,key);//Console.WriteLine("解密后的字符串:"+str2);这个程序最后输出的是“解密后的字符串:http://www.dtcms.net/upgrade.ashx?u={0}&i={1}&v={2}”