在每个C#应用程序中可以找到哪些信息可用作加密的唯一盐?

时间:2013-03-21 10:59:47

标签: c# dpapi

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

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

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

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

System.Reflection.Assembly.GetEntryAssembly()似乎很有希望, if 这是调用我正在制作的这个库的应用程序/服务的程序集,我可以在那里使用一些东西。首先想到的是“将加密数据存储在配置文件名中的盐...”,但对于网站,配置文件始终是“web.config”。

欢迎任何其他想法。

更新...

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

2 个答案:

答案 0 :(得分:1)

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

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

答案 1 :(得分:0)

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

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

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

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