c# - 在 C# 中保护加密 key

标签 c# vb.net encryption cryptography

我了解 .NET 框架中提供的许多加密提供程序以及如何使用它们的基础知识。这很简单。

但我担心的是这个。

假设我想使用这些库来加密 XML 序列化对象,以防止篡改和任何人查看这些文件内容的能力。

我经常遇到的问题是解密此数据的 key 需要作为常量存储在我的应用程序中的某处。基本上使整个练习变得毫无意义。

那么,如何在可反汇编的应用程序中安全地存储加密算法的 key ?

编辑: 所以如果我正确理解下面的两个答案。这意味着基本上任何实现(为了安全)都要求它是只读的或只写的,但不能两者兼而有之?这是正确的吗?

最佳答案

你不知道。如果应用程序可以访问 key ,那么它就是默默无闻的安全性。最好以某种方式对用户进行身份验证(密码是最简单的示例),以确保允许他访问数据。您不能让应用程序为您做这些,因为它根本不值得信赖。任何人都可以获取存储在应用程序中的信息。

如果关键信息存储在其他地方,恶意用户或应用程序也可能访问它。如果没有,则将您的数据直接存储到那个神奇的安全位置。

现在,如果您仍然想沿着这条路走下去并在没有身份验证的情况下存储敏感数据,那么您最好的选择 - 或者至少是一种半途安全的简单方法 - 可能是 DPAPI(请参阅 ProtectedData 中的类 System.Security.Cryptography ).它将使用机器 key 或用户帐户 key (您可以选择)加密数据。这样在另一台机器上运行的程序或使用另一个用户帐户的程序就无法访问它。 Windows 将尝试保护这些 key ,但实际上任何在正确机器上运行或使用正确用户帐户运行的应用程序都可能能够访问您的数据。

关于c# - 在 C# 中保护加密 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268085/

相关文章:

c# - .NET 最小化到托盘并最小化所需资源

mysql - 使用其他 2 个表的计算更新表

c# - 以编程方式删除 Windows Mobile 设备上的电子邮件和 SMS

ruby - 如何使用私钥加密完全加密 Ruby 中的数据?

c# - 从空表 SQL 中获取最新的身份,例如 ID

c# - 如何在 C# 中创建适用于多种类型(整数、字符串、 double 等)的泛型方法

c# - 如何获取 DbSet 的主键?

c# - 在运行时更改默认的 app.config

javascript - 在客户端 JavaScript 中存储 Web 应用程序的用户密码 - 这安全吗?

C# SQLite DB 无法打开,文件已加密或不是数据库