我会先回答这个问题:“你还有其他好主意吗?”
.Net框架内置了对加密配置节的支持。除了一些例外(例如machine.config),您可以将此加密应用于大多数配置节。除非您有充分理由推出自己的配置加密,否则使用框架中已提供给您的内容可能更好。
如果你走这条路,这是一个很好的起点。 http://msdn.microsoft.com/en-us/library/53tyfkaw(v=vs.100).aspx
如果你使用RSA,你仍然需要在安装过程中将公钥和私钥放到机器上。根据你的问题,大概你有办法获得机器的钥匙 - 你只需要知道在哪里存储它。在这种情况下,Microsoft提供了一个存放RSA密钥的地方。您可以按照以下文章介绍如何导入和导出密钥:http://msdn.microsoft.com/en-us/library/yxw286t2(v=vs.100).aspx
在运行应用程序的计算机上,在为某些附加安全性安装密钥对时将私钥标记为不可导出。如果应用程序在特定用户帐户下运行,请将密钥对安装在用户存储中。
用户(或大多数网络应用程序的应用程序池)将需要读取私钥的权限。您可以使用aspnet_regiis.exe作为权限授予。
Web上的大多数示例都会引用aspnet_regiis.exe来创建,导出,导入和授予对RSA密钥对的权限。你不必使用该程序,但如果你这样做,有几个陷阱:
它只运行在名为web.config的文件。因此,如果您有控制台应用程序,则必须将您的配置文件重命名为web.config以将其与aspnet_regiis.exe一起使用。
如果使用aspnet_regiis。exe来创建你的密钥对,它将忽略密钥长度参数。从此响应中,当前推荐的密钥长度为3072.要使用3072位私钥创建密钥对,请勿使用aspnet_regiis.exe。有关如何创建较大密钥长度的示例,请参阅How to set key size of RSA key created using aspnet_regiis?。
毕竟,如果你仍然需要在某个地方存储aes密钥,你可以考虑将它放在一个文件中并使用cipher.exe通过EFS保护它。