& # 39;向后# 39;c#中的公钥/私钥加密,我该怎么做呢?

本文关键字:加密 我该怎么做 私钥 向后 公钥 | 更新日期: 2023-09-27 18:02:29

我希望我的客户端应用程序能够解密服务器端生成的一些数据,但不能加密数据,以便它可以再次解密。

服务器可以加密和解密,客户端只能解密。

RSA显然不能用于此,因为拥有私钥(解密)意味着您还必须拥有公钥。

我需要能够确保我从服务器接收的数据确实来自服务器,而不是由第三方生成的。向客户端应用程序提供公钥意味着您不能这样做。

如果您能提供最好的建议,我将非常欢迎。

& # 39;向后# 39;c#中的公钥/私钥加密,我该怎么做呢?

简单:您使用私钥加密,然后任何人都可以使用公钥解密。这是证书签名的基础。

通常你只加密一个散列,而不是整个数据块,因为这样更快。

  • RSAPKCS1SignatureFormatter constructor
  • CreateSignature

创建两个RSA对-一个(A)用于加密(并将私钥放入客户端应用程序),另一个(B)用于签名(私钥保存在服务器上)。现在,当您将数据发送到客户端时,使用来自密钥对A的公钥对其进行加密,并使用来自密钥对b的私钥对其进行签名。签名是通过对数据的散列计算加密签名来完成的(以使处理更容易并提高处理速度)。由于非对称加密的速度非常低,通常不会对数据本身进行签名。

这个过程是标准的,并且被所有的RSA实现支持(如果值至少一分钱)。如果您计划使用X.509证书,那么pkcs# 7(后来发展为CMS和CAdES)标准是您的朋友。如果您使用普通的RSA密钥,那么您将需要发明自己的格式(但这不是一个大麻烦)。

有一件事需要考虑:您正在将私钥传递给应用程序,这意味着它对用户也是可用的,并且这样可能会泄露数据。你考虑过这个副作用吗?

相关文章: