加密然后解密并不会产生相同的AES明文

时间:2014-11-20 07:33:36

标签: .net encryption cryptography aes

我想使用AES算法加密某些文件。 这是我创建Random键的代码:

public byte[] CreateRandomKey()
{
    RijndaelManaged aes = new RijndaelManaged();
    aes.KeySize = 256;
    aes.BlockSize = 128;
    aes.GenerateKey();
    return aes.Key;
}

我想知道的第一件事是,GenerateKey()方法是否足够随机"安全吗?

这是我的解密代码:

public byte[] Encrypt(byte[] key, byte[] input)
{
    RijndaelManaged aes = new RijndaelManaged();
    aes.KeySize = 256;
    aes.BlockSize = 128;
    aes.Key = key;

    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write);
    cs.Write(input, 0, input.Length);
    cs.Close();
    return ms.ToArray();
}

public byte[] Decrypt(byte[] key, byte[] input)
{
    RijndaelManaged aes = new RijndaelManaged();
    aes.KeySize = 256;
    aes.BlockSize = 128;
    aes.Key = key;

    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write);
    cs.Write(input, 0, input.Length);
    cs.Close();
    return ms.ToArray();
}

我想知道在没有初始化向量的情况下算法是否安全? 而且我的算法有问题,如果我加密一些字节并解密加密结果,结果与原始字节不同。 我希望对于一个问题并不是很重要,有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

是的,密钥生成应该是安全的。操作系统可能最佳地访问加密安全随机数生成器。当然,这不是一个完整的安全审查。

使用随机IV,因为.NET会自动为您生成一个。问题是你没有将IV传达给解密功能。这就是为什么解密密文的前16个字节会失败。