使用C#中的证书进行加密和解密

时间:2016-02-23 18:00:22

标签: c# certificate encryption-asymmetric

我有一个需要在一台服务器上加密的大型XML(由一个c#应用程序加密),需要在另一台服务器上解密(由另一个c#应用程序解密)。 XML包含需要进行此加密的关键信息。

我真正需要的是,执行加密的服务器应知道公钥,并且只有正在进行解密的服务器才知道私钥。此外,此私钥应存储在服务器上的安全区域,例如证书。

可以帮助我实现这些目标的步骤是什么?

  1. 我可以生成私钥并将其存储在证书中,或者证书会自行生成私钥吗?
  2. 此外,如果证书生成公钥和私钥,公钥是否可以与证书分开并导出到必须进行加密的服务器?

3 个答案:

答案 0 :(得分:2)

非对称加密非常耗费处理器,因此非常慢。因此,它通常不用于加密大量数据。

通常所做的是对称加密用于加密大量数据,而非对称加密(公钥)用于加密对称加密中使用的密钥。

加密密钥与加密数据一起传输。密钥被解密(私钥),然后使用对称密钥解密批量数据。

答案 1 :(得分:2)

  1. 如何生成密钥对和证书取决于所使用的软件。

  2. 可以从证书中获取私钥。

  3. 一般方法是使用AES等对称加密算法加密数据,并使用非对称加密算法(如RSA或EC)和公钥加密对称密钥。这样做有两个原因:1。与对称加密相比,非对称加密非常慢。 2.非对称加密的数据长度受密钥大小的限制:典型密钥大小为2048位,将数据长度限制为245字节。

    除了服务器具有HSM或访问TPM之外,通常无法在服务器上安全地存储私钥(或任何东西)。使服务器安全的主要步骤是双因素身份验证。但如果它在共享计算机上,请注意服务器的其他用户的root升级漏洞。

    HSM - Hardware Encryption Module
    TPM - Trusted Platform Module

答案 2 :(得分:1)

这就是我实现它的方式。 在我的服务器2上,我使用' makecert.exe'生成证书(.cer)和私钥(.pvk)。命令。然后,使用' pvk2pfx.exe',我正在生成.pfx文件。这是将存放证书和私钥的文件。 现在我只用公钥将证书导出到服务器1,在那里我加密数据,在服务器2上使用证书的私钥我解密数据。