我知道.NET框架中提供的许多加密提供程序以及如何使用它们的基础知识.这很简单
但我关心的是这一点.
假设我想使用这些库加密XML序列化的对象,以防止篡改和任何人的能力,并查看这些文件的内容.
我经常留下的问题是解密这个数据的关键是需要在我应用程序的某个地方存储为常量.基本上使整个运动无意义.
那么,如何在可拆卸的应用程序中安全地存储加密算法的密钥?
编辑:所以如果我正确地理解下面的两个答案.这意味着,基本上任何实现(要保证)都要求它是只读的或是不可写的,但是从来都不是这两个?它是否正确?
解决方法
你没有如果应用程序可以访问密钥,则只是安全性.最好以某种方式验证用户(密码是最简单的例子),以确保他被允许访问数据.你不能让应用程序为你做,因为它根本不值得信赖.任何人都可以获取存储在应用程序中的信息.
如果密钥信息存储在其他位置,恶意用户或应用程序也可能访问它.如果没有,请将您的数据直接存储到该魔法安全的地方.
现在,如果您仍然希望下载该路径并存储敏感数据而无需身份验证,则您最好的选择 – 或者至少是一个简单的方法 – 半途安全 – 可能是DPAPI(参见System.Security.Cryptography
中的ProtectedData
类).它将使用机器密钥或用户帐户密钥对数据进行加密(您可以选择).因此,在另一台机器上运行的程序或与其他用户帐户无法访问的程序. Windows将尝试保护这些密钥,但实际上在正确的计算机上运行的任何应用程序或正确的用户帐户可能可以访问您的数据.