7

在每个 C# 应用程序中可以找到哪些信息可以用作加密的唯一盐,包括 Web 应用程序、Windows 服务和 wcf 层?

我想创建一个库,允许使用(DPAPI)System.Security.Cryptography.ProtectedData.Protect()System.Security.Cryptography.ProtectedData.Unprotect()方法轻松加密存储在配置文件中的敏感数据。

该库还将由我正在制作的一个单独的应用程序使用,该应用程序可以在使用这些值的应用程序之外加密和解密配置值,允许更新配置文件而无需重新编译所有内容或需要访问原始源,尽管访问源应始终可用。

盐必须足够简单,以便在单独的应用程序中手动输入(例如,很难识别 GUID)。

System.Reflection.Assembly.GetEntryAssembly()看起来很有希望,如果这是调用我正在制作的这个库的应用程序/服务的程序集,我可以在那里使用一些东西。第一个想法是“将 salt 设置为存储加密数据的配置文件名......”,但对于网站来说,配置文件始终是 'web.config'。

欢迎任何其他想法。

更新...

'GetExecutingAssembly()'...与'GetEntryAssembly()' 有何不同?

4

2 回答 2

1

每个应用程序/程序集都有一个版本号,这可能是一个选项。

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
于 2013-03-21T11:02:42.430 回答
0

System.Reflection.Assembly.GetEntryAssembly().GetName().Name...

似乎是 exe 或 DLL 的名称,或者更准确地说,VS2010 使用程序集名称作为 exe 的名称。我需要调查这如何与网站和服务一起使用。

如果我加密和解密配置值的外部应用程序(加密应用程序)也可以“窥视”请求的程序集的“名称”(使用加密配置的程序),那么任何使用加密库的应用程序都只使用该库而不提供盐,并且库可以为自己(谁在调用它)计算出程序集名称并将其用作盐。如果 dll 或 exe 被重命名,我有一个机制来检索程序集名称值,内置在加密应用程序中。

ps 我不想将自己的答案标记为“已接受”,因此请完善我的建议并将其放入您自己的答案中,如果我得到任何好的答案,我会保证将其中一个标记为“已接受”。

于 2013-03-21T15:50:09.547 回答