部分解密数据

时间:2013-10-28 08:53:33

标签: c# cryptography

我有16字节des加密数据,我想解密问题是我的例程只解密前8字节和字节9它抛出异常坏数据我的数据没有填充正好16字节的数据 这是我的代码

    public byte[] Decrypt(byte[] data)
    {
        List<byte> resData = new List<byte>();
        try
        {
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();


            byte[] bytes = StringToByteArray(_key);
            MemoryStream memoryStream = new MemoryStream(data);
            CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(bytes, new byte[8]), CryptoStreamMode.Read);
            cryptoProvider.Padding = PaddingMode.None;
            cryptoProvider.Mode = CipherMode.ECB;
            BinaryReader reader = new BinaryReader(cryptoStream);
            for (int i = 0; i < data.Length; i++)
            {
                resData.Add(reader.ReadByte());
            }


        }
        catch { }
        return resData.ToArray();
    }

1 个答案:

答案 0 :(得分:4)

  1. 您需要在创建加密器之前在cryptoProvider设置属性

  2. 无需跳过所有流箍,只需致电TransformFinalBlock

  3. 您的加密极端弱。 DES具有非常小的密钥空间,可以通过暴力破解。

  4. 代码的改进版本可能如下所示:

    byte[] bytes = StringToByteArray(_key);
    
    using(DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider())
    {
        cryptoProvider.Padding = PaddingMode.None;
        cryptoProvider.Mode = CipherMode.ECB;
    
        using(var crypter =  cryptoProvider.CreateDecryptor(bytes, new byte[8]))
        {
            return crypter.TransformFinalBlock(bytes, 0, bytes.Length);
        }
    }