我想使用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();
}
我想知道在没有初始化向量的情况下算法是否安全? 而且我的算法有问题,如果我加密一些字节并解密加密结果,结果与原始字节不同。 我希望对于一个问题并不是很重要,有人可以帮助我。
答案 0 :(得分:2)
是的,密钥生成应该是安全的。操作系统可能最佳地访问加密安全随机数生成器。当然,这不是一个完整的安全审查。
使用随机IV,因为.NET会自动为您生成一个。问题是你没有将IV传达给解密功能。这就是为什么解密密文的前16个字节会失败。