关于C# DES加密时密钥问题

问题描述

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}”

时间: 2024-10-22 09:52:22

关于C# DES加密时密钥问题的相关文章

des加密时密钥问题-关于C# DES加密时密钥问题 求解答

问题描述 关于C# DES加密时密钥问题 求解答 为什么有些des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); 是这样写 而有一些是这样写 des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s

DES加密错误(java.security.NoSuchAlgorithmException: Cannot find any provider suppor)

问题描述 我的环境是jdk1.5,在请求一个webService的时候要在soap header中传一个密码,并对密码进行DES加密.但是现在加密代码: deskey = new DESKeySpec(key);keySpec = new SecretKeySpec(deskey.getKey(), "DES"); //报错的地方Cipher cipher = Cipher.getInstance(strAlgorithm); //报错的地方cipher.init(Cipher.ENC

源码推荐:使用C#编写DES加密程序的framework

程序|加密                    源码推荐:使用C#编写DES加密程序的framework                                Batman    还是我的老观点,对于新东西我们要不断练习才能够掌握它.所以我就不写些抽象的概念了,打算以后不定期给出一些实际的代码,呵呵在微软的帮助中,喜欢把它带的例子称为它的新技术的framework,我在实际编程中确实感觉如此,我们往往是根据这些实例代码来编写自己的实际应用的,所以我也用了framework这个名词. :

算法-C#AES加密时,怎么产生密钥和密钥向量?

问题描述 C#AES加密时,怎么产生密钥和密钥向量? 各位大神好,最近在做一个一个项目,牵扯到加密,网上搜到了加密算法,但是不知道AES的机密密钥和密钥向量怎么产生?烦请各位为小弟指点一下~ 解决方案 /// AES加密 /// </summary> /// <param name=""inputdata"">输入的数据</param> /// <param name=""iv""&g

密钥生成器-java中的 DES 加密与解密

问题描述 java中的 DES 加密与解密 DES类 package dao; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; public class DES { public static String ALGORITHM_DES="DES"; //加密算法的名称 public sta

c++ mfc-mfc开发中 读取经过des加密的文件时,只能读取一部分加密文件

问题描述 mfc开发中 读取经过des加密的文件时,只能读取一部分加密文件 在mfc中,读取一个经过des加密的文件时只能读取到其中的一部分文件,其他的都读取不到 解决方案 先看解密是否正确,估计格式就不对.

用DES加密数据库信息,增强Asp.net的安全性(1)--分析

asp.net|安全|安全性|加密|数据|数据库 在实际的数据库系统开发中,我们一般都是把数据库的连接字符串放在了Asp.net的配置文件Config.web中,连接字符串一般如下:  <appSettings>    <add key="ConnStr" value="server=192.168.2.36;database=Mdata;uid=sa;password=111000" />  </appSettings>    

PHP、Java des加密解密实例

  这篇文章主要介绍了PHP.Java des加密解密实例,des加密是对称加密中在互联网应用的比较多的一种加密方式,本文分别给出了PHP和JAVA版本的实现代码,需要的朋友可以参考下 des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库 下面是加密解密的实例 代码如下: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_

PHP、Java des加密解密实例_php实例

des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库 下面是加密解密的实例 复制代码 代码如下: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);  $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);  $key = "This is a very secre