c# 多重DES错误,即内存流使用K1密钥加密后,无法使用K2密钥进行解密。
我想设计个多重的DES来使用,比如5重,那么就是K1加密 K2解密 K3加密 K4解密 K5加密注意是多重,不是多次,
但是现在K1加密成功,K2就解密不了了,说不正确数据,自己上网找了很多资料还是没有办法解决,花了不少时间了。请各位师傅和师兄们帮帮忙。以下是源码,密钥和向量存放在KeyIV中,前面是密钥,最后一个是向量。
唉,但是我也很不抱有希望唉,,准备放弃了!!!!!
        #region 多重DES加密
        /// <summary>
        /// 多重DES加密
        /// </summary>
        /// <param name="KeyIV">密钥向量集</param>
        /// <param name="desCount">重数</param>
        /// <param name="values">要加密的字节数组</param>
        /// <returns></returns>
        public byte[] MuDES_EN(byte[][] KeyIV, int desCount, byte[] values)
        {
            try
            {
                byte[] MDesByte;                //加密第一次
                MDesByte = CreateEncryptByte(KeyIV[0], KeyIV[desCount], values);
                //按照重数-1循环加解密
                for(int i=1;i<desCount;i++)
                {
                    //解密
                    MDesByte = CreateDescryptByte(KeyIV[i], KeyIV[desCount], MDesByte);
                    i = i + 1;
                    //加密
                    MDesByte = CreateEncryptByte(KeyIV[i], KeyIV[desCount], MDesByte);
                }
                return MDesByte;            }
            catch
            {
                return null;
            }
        }
        #endregion        #region 加密字节数组(标准DES)
        /// <summary>
        /// 加密字节数组(标准DES)
        /// </summary>
        /// <param name="key">密钥</param>
        /// <param name="iV">向量</param>
        /// <param name="values">要加密的字节数组</param>
        /// <returns></returns>
        public static byte[] CreateEncryptByte(byte[] key, byte[] iV, byte[] values)
        {
            try
            {
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    des.Key = key;
                    des.IV = iV;
                    System.IO.MemoryStream ms = new System.IO.MemoryStream(values);
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        ms.Flush();
                        cs.Write(values, 0, values.Length);
                        cs.FlushFinalBlock();
                        cs.Close();
                    }
                    //加密流转换成字节流
                    byte[] buffer = ms.ToArray();
                    //关闭内存流
                    ms.Flush();
                    ms.Close();
                    des.Clear();
                    //返回已加密的字节数组
                    return buffer;
                }
            }
            catch
            {
                //解密不成功,返回NULL
                return null;
            }
        }
        #endregion
        #region 解密字节数组(标准DES)
        /// <summary>
        /// 解密字节数组(标准DES)
        /// </summary>
        /// <param name="key">密钥</param>
        /// <param name="iV">向量</param>
        /// <param name="values">要解密的字节数组</param>
        /// <returns></returns>
        public static byte[] CreateDescryptByte(byte[] key, byte[] iV, byte[] values)
        {
            try
            {
                using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
                    des.Key = key;
                    des.IV = iV;
                    System.IO.MemoryStream ms = new System.IO.MemoryStream();
                    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        ms.Flush();
                        //ms.Close();
                        cs.Write(values, 0, values.Length);
                        cs.FlushFinalBlock();
                        cs.Close();
                    }
                    //解密流转换成字节流
                    byte[] buffer = ms.ToArray();
                    ms.Flush();
                    //关闭内存流
                    ms.Close();
                    //返回已加密的字节数组
                    return buffer;
                }
            }
            catch
            {
                //解密不成功,返回NULL
                return null;
            }
        }
        #endregion