des加密算法如下:
public byte[] Encrypt(byte[] pToEncrypt, byte[] sKey)
    {
      try
      {
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
         
        des.Key = sKey;
        des.IV = sKey;
        
       // des.Padding = PaddingMode.None;
        using (MemoryStream ms = new MemoryStream())
        {
          using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
          {
            cs.Write(pToEncrypt, 0, pToEncrypt.Length);
            cs.FlushFinalBlock();
            return ms.ToArray();
          }
        }
      }
      catch
      {
        return null;
      }    }现加密数据:
byte[] src = System.Text.Encoding.GetEncoding(0).GetBytes("12345678"), key = System.Text.Encoding.GetEncoding(0).GetBytes("11111111")
byte[] data=Encrypt(src,key);
如果des.Padding = PaddingMode.None,则data.Length=8;如果des.Padding 取默认值即PKCS7,,则data.Length=16.
我疑惑的是src 的长度正好是8byte即64bit,会添加填充字符串吗?

解决方案 »

  1.   

    如果不是8byte的倍数,会补充到8byte的倍数,解密的时候会将添加的去掉
    如果正好是就不用了。
      

  2.   

    DES加密的时候,如果不是8的整倍数,则会以某种机制补足到8字节长度
      

  3.   

    我的源数据就是8字节啊,des.Padding = PaddingMode.PKCS7时,为什么加密后,数据长度为16字节?
      

  4.   

    PCKS7 Padding模式规定的,不足8字节以缺的字节数(8-数据块字节数)填充,如果正好是8的倍数,则后面再补8个"\x8"字符作为加密的原文,解密时会自动去掉。
    如果不想多出8个字符,则使用PaddingMode.Zeros。