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

本文关键字:加密 解密 证书 使用 | 更新日期: 2023-09-27 18:35:49

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

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

应该采取哪些步骤来帮助我实现这一目标?

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

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

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

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

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

通常,除了服务器在

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

HSM - 硬件加密模块
TPM - 受信任的平台模块

非对称加密是处理器密集型的,因此非常慢。因此,它通常不用于加密大量数据。

通常的做法是对称加密用于加密

大量数据,非对称加密(公钥)用于加密对称加密中使用的密钥。

加密

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

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