对.KEY和IV根据不同的加密算法位数要求不通.DESCryptoServiceProvider实现DES标准加密算法.他的IV和KEY是8位的所以byte[] bytKeyString byte[] bytIvString 都应该定义为8位数组.

解决方案 »

  1.   

    是的,.net中不同的算法要用不同长度的key,你用的是des算法,它的密钥长度是56,iv是8位.
    你这个方法一定要传指定的key和iv吗?
    如果不要指定,你可以这样用:
    UnicodeEncoding enco =  new UnicodeEncoding();
    byte[] bys = enco.GetBytes(sOriginalText);
    MemoryStream mStream = new MemoryStream();
    DESCryptoServiceProvider des = new DESCryptoServiceProvider(); ICryptoTransform crypto = des.CreateEncryptor();
    CryptoStream cStream = new CryptoStream(mStream, crypto, CryptoStreamMode.Write);
    cStream.Write(bys, 0, bys.length);
    byte[] bytCrypt = new byte[mStream.Length];
    mStream.Read(bytCrypt,0,bytCrypt.Length);
    String sCryptograph = encode.GetString(bytCrypt,0,bytCrypt.Length);return sCryptograph;
      

  2.   

    好象还是不行,是不是和环境有关
    UnicodeEncoding enco =  new UnicodeEncoding();
    byte[] bys = enco.GetBytes(sOriginalText);
    MemoryStream mStream = new MemoryStream();
    DESCryptoServiceProvider des = new DESCryptoServiceProvider(); ICryptoTransform crypto = des.CreateEncryptor();
    CryptoStream cStream = new CryptoStream(mStream, crypto, CryptoStreamMode.Write);
    cStream.Write(bys, 0, bys.length);
    byte[] bytCrypt = new byte[mStream.Length];
    mStream.Read(bytCrypt,0,bytCrypt.Length);
    String sCryptograph = encode.GetString(bytCrypt,0,bytCrypt.Length);return sCryptograph;这段也无法用,从mstream中读出的byte都是0
      

  3.   

    int i= mStream.Read(bytCrypt,0,bytCrypt.Length);
    i=0,没有从mstream中读出
      

  4.   

    改成这样试一试
    private string Encrypt(string sOriginalText,string sKey)
    {
    UnicodeEncoding encode = new UnicodeEncoding(); 
    byte[] bytText = encode.GetBytes(sOriginalText);
    byte[] bytKeyString = encode.GetBytes(sKey);
    byte[] bytKey= (new MACTripleDES()).ComputeHash(bytKeyString);\\改变
    byte[] bytIvString = encode.GetBytes("abc");
    byte[] bytIv=(new MACTripleDES()).ComputeHash(bytIvString);\\改变 MemoryStream memstream = new MemoryStream(); DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    ICryptoTransform desencrypt = des.CreateEncryptor(bytKey,bytIv);
    CryptoStream cryptostream = new CryptoStream(memstream,desencrypt,CryptoStreamMode.Write);
    cryptostream.Write(bytText,0,bytText.Length);
    memstream.Position=0;\\改变
    byte[] bytCrypt = new byte[memstream.Length];
    memstream.Read(bytCrypt,0,bytCrypt.Length);
    string sCryptograph = encode.GetString(bytCrypt,0,bytCrypt.Length);            return sCryptograph;
    }