无法正确解密

时间:2015-04-09 17:25:13

标签: c# encryption key

我们使用了这里找到的加密方法,就是这样:

    public static byte[] Key = new byte[]{0x43, 0x72, 0x6e, 0x6d, 0x54, 0x4d, 0x65,
                                  0x94, 0x16, 0x32, 0x44, 0x84, 0x7e, 0x18,
                                  0x64, 0x76, 0x6e, 0x63, 0x64, 0x7a, 0x5f,
                                  0x84, 0x7f, 0x9a};

    public static byte[] Encrypt(byte[] data)
    {
        MemoryStream ms = new MemoryStream();
        Rijndael alg = Rijndael.Create();
        alg.Key = Key;
        CryptoStream cs = new CryptoStream(ms,
        alg.CreateEncryptor(), CryptoStreamMode.Write);
        cs.Write(data, 0, data.Length);
        cs.Close();
        byte[] encryptedData = ms.ToArray();
        return encryptedData;
    }

当我们解密时,我们使用了这个函数:

    public static byte[] Decrypt(byte[] data)
    {
        MemoryStream ms = new MemoryStream();
        Rijndael alg = Rijndael.Create();
        alg.Key = Key;
        CryptoStream cs = new CryptoStream(ms,
        alg.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(data, 0, data.Length);
        cs.Close();
        byte[] decryptedData = ms.ToArray();
        return decryptedData;
    }

如此处所示。 我们编写了一个函数来确保加密前的字节数组与解密后的字节数组相同,并且它使此测试失败。 什么可以成为我的问题?

1 个答案:

答案 0 :(得分:1)

您还需要在加密阶段保存初始化向量(IV)并在解密阶段使用它。您可以使用在算法对象实例化时创建的IV(在这种情况下,您需要将其保存在某处以便可以重复使用),或者以与指定Key相同的方式指定自己的IV。有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/system.security.cryptography.symmetricalgorithm.iv(v=vs.110).aspx