谢谢luoqing!现在的问题已经解决了!是由于不支持的缘故!刚才我看了一例子是介绍加密的,部分代码如下:
protected string Encrypt(string pToEncrypt,string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
...}
我不知道其中方法定义的第二参数变量sKey是干什么用的?如何在引用该方法时定义该sKey?
好像不是随便定义的一个字符!请问如何引用该方法?
谢谢!
protected string Encrypt(string pToEncrypt,string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
...}
我不知道其中方法定义的第二参数变量sKey是干什么用的?如何在引用该方法时定义该sKey?
好像不是随便定义的一个字符!请问如何引用该方法?
谢谢!
解决方案 »
- .net中 如果根据新闻标题 显示相应图片呢?
- 很菜的问题,用一个CheckBoxList连SQL,报错
- 高手请指点:生成服务器端得控件
- 我该怎么办啊
- 一个关于datagrid删除的问题
- asp.net怎么实现边输入TextBox边检索数据库表,动态显示内容。类似于百度的搜索框!
- 请问如果在webconfig中动态修改和添加内容呀?
- 为什么一页有多个web控件HYPERLINK,只要点击其中一个,所有的都会变成紫色?
- ataGrid排序事件中怎样取得boundColumn中的HeaderText并修改?
- 请教一个,一直让我闷闷不乐的问题,一直没能得到解决,请大家看一下
- DataGrid更新数据
- 读写xml文件时对于权限的控制问题(郁闷中...)
那么要用这个作为初始化参数:
CspParameters cp=new CspParameters();
cp.Flags=CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider rsa=new RSACryptoServiceProvider(cp);(具体是什么原因不知道,ASPNET用户都已经是Administrators了。。)DES,MD5等就不需要了。。~~~
protected string Encrypt(string pToEncrypt,string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
...}
我不知道其中方法定义的第二参数变量sKey是干什么用的?如何在引用该方法时定义该sKey?
好像不是随便定义的一个字符!请问如何引用该方法?谢谢Lostinet!!!
ASCIIEncoding.ASCII.GetBytes(sKey);
只是返回sKey的ASCII字节数组
sKey要是8个字节,否则会出错
谢谢!那该如何修改呢?或者是在引用该方法时如何定义该string sKey呢?
string sKey="dddddddd";
保证sKey是8个英文字符,或4个中文字就可以了
“指定键的大小对于此算法无效”
引用代码如下:Encrypt(Password.Text,"中国人民");
请问为什么?
你可以这样:
TripleDESCryptoServiceProvider tdes=new TripleDESCryptoServiceProvider();
byte[] md5Data=new MD5CryptoServiceProvider().ComputeHash(Encoding.Unicode.GetBytes("密码"));
byte[] key=new byte[10];//算法所需要的长度。可以用tdes.LegalKeySizes
md5Data.CopyBy(key,0);把md5的前10位复制到key里。然后你就用key进行加密解密好了。。至于IV。这个没有关系。你甚至用key来做IV也可以。
或者用tdes.GenerateIV();随机生成一个。然后tdes.Key=key;也算了。。
最后:
CreateEncryptor和CreateDecryptor生成算法的执行对象。详细看:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemsecuritycryptographyicryptotransformclasstopic.htm配合CryptoStream和StreamWriter最好。。看
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemsecuritycryptographytripledescryptoserviceproviderclasstopic.htm
上例子就好了。
public string Encrypt(string pToEncrypt,string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach(byte b in ms.ToArray())
{
//Format as hex
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}在Button_Click事件中引用如下:
tmpstr = Encrypt(Username.Text,"中国人民");
Response.Write(tmpstr);当我执行时出错:
“指定键的大小对于此算法无效”
请问究竟错在哪里???
当引用该方法时,如果让sKey包含非汉字的字符就可以通过了!
是不是只要让sKey是非中文的字符就行呢?
不要用这个~~
谢谢指点!您能把这段代码重新写一下吗?
byte[] key=new byte[10];//算法所需要的长度。可以用tdes.LegalKeySizes
md5Data.CopyBy(key,0);把md5的前10位复制到key里。同时也非常感谢luoqing!