可以在每个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()”有何不同?
答案 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。我不希望将自己的答案标记为“已接受”,因此请完善我的建议并将其写入您自己的答案中,如果我得到任何好的答案,我将保证将其中一个标记为“已接受”。