哪些信息可以在每个c#应用程序中被用作加密的独特盐?
本文关键字:加密 应用程序 信息 | 更新日期: 2023-09-27 18:05:10
在每个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()"有什么不同?
每个应用程序/程序集都有一个版本号,这可以是一个选项。
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
System.Reflection.Assembly.GetEntryAssembly().GetName().Name
…
似乎是exe或DLL的名称,或者更准确地说,VS2010使用程序集名称作为exe的名称。我需要调查一下这在网站和服务中是如何工作的。
如果我的外部应用程序加密和解密配置值(加密应用程序)也可以"偷看"请求的程序集的"名称"(使用加密配置的程序),那么任何使用加密库的应用程序只是使用库而不提供盐,库可以为自己计算出程序集名称(调用它的人)并将其用作盐。如果dll或exe被重命名,我有一个机制来检索程序集名称值,内置到加密应用程序。
注。我不喜欢把我自己的答案标记为"接受",所以完善我的建议,把它放在你自己的答案中,我保证如果我得到任何好的建议,我会把其中一个标记为"接受"。