几年前,当第一次被引入到ASP.net和.NET Framework时,我构建了一个非常简单的在线文件存储系统。 该系统使用Rijndael加密来存储服务器硬盘上加密的文件,并使用HttpHandler解密并将这些文件发送给客户端。AES加密和密钥存储?
作为我的第一个使用ASP.net和数据库的项目之一,我并不十分了解整个系统是如何工作的(以及落入same trap described by Jeff Atwood on this subject),所以我决定将新生成的密钥和IV与每个文件项在数据库中。
为了使事情更清楚一点,加密只是为了防止文件直接访问服务器,并且密钥不是由用户输入的密码生成的。
我的问题是,假设我不希望保留的所有文件的一个关键,如何应该我存储加密密钥为安全起见?什么被认为是最佳实践? (即:在不同的服务器上,在纯文本文件上加密)。
此外,这种类型的加密算法中使用的初始化向量是什么?它应该在系统中保持不变吗?
次要观察:“AES是一个分组密码,它将数据分成块并将最后一个块加密的结果送入下一个块。”您正在描述[CBC](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29)* a *安全使用AES的方法。还有其他安全的解决方案 - 并不都需要一个初始化向量。 – KovBal 2014-10-14 16:55:39