用Rijndael解密字节数组 - 丢失字节

时间:2018-03-26 21:42:29

标签: c#

我正在.txt文件中编写加密(Rijndael)字节数组。 当我读出它时,我得到一个字节[48]。一旦我解密它,我得到一个字节[32]。

为什么我在这里丢失字节?如果我在控制台中写入结果,它也会在特定点切割。

static void ShowEntries()
{
    string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    path = path + @"\SafePass\";

    byte[] file = File.ReadAllBytes(path + @"\crypt.txt");
    using (MemoryStream memory = new MemoryStream(file))
    {
        using (BinaryReader binary = new BinaryReader(memory))
        {
            byte[] result = binary.ReadBytes(file.Length);
            byte[] plainText = new byte[48];
            plainText = Decrypt(result);
            string SplainText = Converter(plainText);

            Console.WriteLine(SplainText);
        }
    }
}

static string Converter(byte[] data)
{            
    string base64 = Convert.ToBase64String(data);
    return base64;
}

static byte[] Decrypt(byte[] encryptedByte)
{
    {
        string password = @"mykey123"; // Your Key Here

        UnicodeEncoding UE = new UnicodeEncoding();
        byte[] key = UE.GetBytes(password);

        MemoryStream mem = new MemoryStream();

        RijndaelManaged RMCrypto = new RijndaelManaged();

        CryptoStream cs = new CryptoStream(mem,
            RMCrypto.CreateDecryptor(key, key),
            CryptoStreamMode.Write);

        cs.Write(encryptedByte, 0, encryptedByte.Length);

        byte[] cipherText = null;
        cipherText = mem.ToArray();

        cs.Close();
        return cipherText;
    }
}

1 个答案:

答案 0 :(得分:0)

假设您的输入数据(即您正在加密的数据)长度为32个字节,那么正在发生的是加密数据被填充,这意味着额外的冗余信息会被添加到加密数据中。

In .NET, the default padding mode for symmetrical algorithms like Rijndael是PKCS#7。

我认为如果你看一下加密数组中的额外数据,所有额外的值都是16(32字节输入,下一个块是48,填充是差异:48-32 = 16)。

请注意,填充字节将在解密时被删除,前提是相同的填充模式用于解密为加密。它不会影响您的数据。

但如果您真的想要,可以将填充模式设置为无,或MSDN中提到的其他值之一。

Here's a similar answer提到您也可以参考的类似问题。