使用.NET

时间:2017-01-05 14:57:11

标签: .net encryption .net-4.0 secret-key

我开发了两个需要存在于两个独立服务器上的应用程序。一个将加密数据并将加密数据存储在SQL Server实例中(SQL 2012 Standard,因此没有TDE支持)。另一个应用程序将拉下加密数据并将其解密以显示在某些报告中。

我是否应该使用共享私钥/公钥访问来查看密钥 AESManaged

1 个答案:

答案 0 :(得分:3)

AES是对称密钥密码,因此不使用私钥/公钥对。使用AES,所有参与者必须能够访问相同的密钥才能加密和解密数据。如果您对可以访问相同密钥的两个系统感到满意,那么您不需要为此解决方案引入非对称(公共/私有)加密。

如果您不希望两个系统都具有对静态共享密钥的持久访问权限(您可能没有),则可以使用混合密码系统 - 生成随机AES"会话"要在源系统上加密的每条消息/记录的密钥,使用对称密钥加密数据(使用AEAD模式或通过密码在上通过HMAC添加认证标记),然后加密会话密钥通过收件人的公钥。您现在可以将加密的会话密钥和加密的数据一起传输,接收方将使用其私钥解密会话密钥,然后解密数据。任何单个邮件的妥协都不会危及任何其他记录(只要它不是受损的收件人私钥)。

在.NET中表示AesManagedAesCryptoServiceProvider(有关详情,请参阅here)和RsaCryptoServiceProviderRsaCNG(请参阅here) 。