是否可以使用纯加密和解密密钥而不是私钥和公钥?正如我在 .Net 非对称 RSA 实现中所知道的,私钥RSAParameters parameters = (new RSACryptoServiceProvider()).ExportParameters(true)
是公钥的超集。并且使用私钥我们可以加密和解密我们的数据。但我只需要密钥来解密数据。怎么做?
我尝试将 RSAParameters 字段归零,但 RSACryptoServiceProvider 对象无法导入此类参数。
是否可以使用纯加密和解密密钥而不是私钥和公钥?正如我在 .Net 非对称 RSA 实现中所知道的,私钥RSAParameters parameters = (new RSACryptoServiceProvider()).ExportParameters(true)
是公钥的超集。并且使用私钥我们可以加密和解密我们的数据。但我只需要密钥来解密数据。怎么做?
我尝试将 RSAParameters 字段归零,但 RSACryptoServiceProvider 对象无法导入此类参数。
如果您在问我认为您在问什么,那么您正在解决这样一个问题:
你加密了一些数据。您将其发送给客户,并希望他们能够解密它,但您不希望他们能够加密任何东西,因为这样他们就可以说服其他客户他们就是您。
这么近吗?你能告诉我们你正在解决什么问题吗?
对于线程上的其他人来说,听起来很明显 OP 想要一个仅解密密钥,而不是通常的仅加密公钥。
编辑:评论是正确的,因为私钥不能用于加密,但给定私钥生成公钥并不难。如果您拥有私钥,那么您实际上可以同时拥有这两个密钥。
编辑2:OP,您可能应该查看数字签名。您可以签署一条消息(使用私钥),然后使用公钥确认签名,我认为这正是您所要求的。
要解码数据,您需要公钥或私钥。取决于它是如何编码的。
坚持标准模式,小心不要分发你的私钥。
从您的评论(到各种答案),您只需要签名(您的数据的哈希)。用每个人都可以拥有的密钥加密数据是没有用的。
有用于签名的标准函数和模式。
我认为您需要使用私钥进行解密,使用公钥进行加密。
接收者(解密者)将其公钥发送给发送者(加密者)。所以每个人都可以发送消息,只有接收者可以阅读它们。这是你需要的吗?
如果您需要确保消息来自某个发件人,则需要使用自己的私钥添加签名。接收方可以使用发送方公钥来验证这一点。
如果您想确保私钥持有者无法加密某些内容,以至于结果与公钥持有者发送的消息无法区分,那么您可以简单地对数据进行双重包装。
只需有两个密钥对。
A方得到密钥对1的私钥和密钥对2的公钥。B方得到密钥对1的公钥和密钥对2的私钥。
B 方首先用密钥对 1 的公钥加密消息,然后用密钥对 2 的私钥对其进行加密,从而发送他/她/它的消息。
Side A decrypts the result using the public key of key-pair 2, and the private key of key-pair 1 (in that order).
Side A can generate the public key of key-pair 1, but cannot generate the private key of key-pair 2, so side A cannot generate a valid message.
The inverse works in the other direction.
Down-side: If you have a central person (or server) that every other person (or computer) is communicating with, each party needs their own private key, and they need to share the corresponding public key with the central person (or server) they are communicating with.