11

我正在使用一个 AES 加密/解密类,它需要一个键值和向量值来加密和解密 MVC3 应用程序中的数据。

在保存记录时,我将数据加密,然后存储在数据库中。当我检索记录时,我正在控制器中解密并将未加密的值传递给视图。

关注的不是在数据穿越网络时保护数据,而是在数据库受到损害时保护它。

我读过很多帖子说不要把加密密钥放在你的代码中。

好的,那么它们应该保存在哪里?文件系统?另一个数据库?

寻找一些方向。

4

2 回答 2

3

常识说,如果入侵者可以访问您的数据库,他们很可能也可以访问您的文件系统。这真的取决于你。一方面,您可以尝试隐藏它。在配置文件中,在文件系统中某处的普通文件中,使用应用程序中的另一个密钥对其进行加密......等等。

配置文件是一个合乎逻辑的答案,但为什么要冒险 - 混合它。随意将密钥与多级加密混合 - 一个需要记录本身的某些内容并且对每条记录都是唯一的,另一个需要配置值,第三个需要特定于应用程序的值,也许第四个来自隐藏的库在您的应用程序的参考范围内?这样,即使某一层以某种方式受到损害,您也会有其他几个保护它。

是的,它增加了开销。是的,它相对昂贵。但是,如果您拥有用户信用卡详细信息等敏感数据,是否值得?你打赌它是。

我在我的一个个人宠物项目中使用了类似的加密和散列技术,该项目高度关注安全性并受到严格控制。这取决于您在任何时候需要显示多少数据 - 例如,我的一次只能获取 10 条记录,很可能甚至更少。

... 指定混合的含义:加密一次。然后使用不同的密钥和建议的不同算法再次加密该数据。

于 2012-06-08T09:34:05.807 回答
0

我会使用受 ACL 保护的注册表项,因此只有运行您的应用程序池的帐户才能读取它们。

于 2012-06-08T09:38:16.297 回答