谢谢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?
好像不是随便定义的一个字符!请问如何引用该方法?
谢谢!

解决方案 »

  1.   

    如果要在ASP。NET里使用RSA或DSA的服务,
    那么要用这个作为初始化参数:
    CspParameters cp=new CspParameters();
    cp.Flags=CspProviderFlags.UseMachineKeyStore;
    RSACryptoServiceProvider rsa=new RSACryptoServiceProvider(cp);(具体是什么原因不知道,ASPNET用户都已经是Administrators了。。)DES,MD5等就不需要了。。~~~
      

  2.   

    谢谢Lostinet对我的大力支持!我就是按照类似您的指点修改后完全正常的!请Lostinet看看我刚才提出的第二个问题:
    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!!!
      

  3.   

    Key和IV都要是8位的,但你的只有byte不是8位的
    ASCIIEncoding.ASCII.GetBytes(sKey);
    只是返回sKey的ASCII字节数组
    sKey要是8个字节,否则会出错
      

  4.   

    TO: luoqing
    谢谢!那该如何修改呢?或者是在引用该方法时如何定义该string sKey呢?
      

  5.   

    你只要保证ASCIIEncoding.ASCII.GetBytes(sKey)是8个字节就行了,如果它多于8个字节,你可以把后面的字节去掉,如果少于8个字节就后面补齐,
    string sKey="dddddddd";
    保证sKey是8个英文字符,或4个中文字就可以了
      

  6.   

    当我引用该方法时出错:
    “指定键的大小对于此算法无效”
    引用代码如下:Encrypt(Password.Text,"中国人民");
    请问为什么?
      

  7.   

    建议你用三重DES。ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemSecurityCryptographyTripleDESCryptoServiceProviderClassTopic.htm关于KEY和IV的长度,对于DES是要求固定的。
    你可以这样:
    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
    上例子就好了。
      

  8.   

    加密的方法如下:
    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);当我执行时出错:
    “指定键的大小对于此算法无效”
    请问究竟错在哪里???
      

  9.   

    谢谢Lostinet、luoqing!!!
    当引用该方法时,如果让sKey包含非汉字的字符就可以通过了!
    是不是只要让sKey是非中文的字符就行呢?
      

  10.   

    ASCIIEncoding.ASCII??
    不要用这个~~
      

  11.   

    to Lostinet:
    谢谢指点!您能把这段代码重新写一下吗?
    byte[] key=new byte[10];//算法所需要的长度。可以用tdes.LegalKeySizes
    md5Data.CopyBy(key,0);把md5的前10位复制到key里。同时也非常感谢luoqing!