是否可以使用纯加密和解密密钥而不是私钥和公钥?据我所知,.Net非对称RSA实现私钥RSAParameters parameters = (new RSACryptoServiceProvider()).ExportParameters(true)
是公钥的超集。使用私钥我们可以加密和解密我们的数据。但 我只需要密钥来解密 数据。怎么做?
我尝试将RSAParameters字段置零,但RSACryptoServiceProvider对象无法导入此类参数。
答案 0 :(得分:2)
如果你问我认为你在问什么,你就是在解决像这样的问题:
您加密了一些数据。您将它发送给客户端,并希望它们能够解密它,但您不希望它们能够加密任何东西,因为它们可以说服其他客户端他们是你。
那很接近吗?你能告诉我们你在解决什么问题吗?
对于线程上的其他人来说,听起来很清楚OP需要一个仅解密密钥,而不是通常的加密公钥。
编辑:评论是正确的,因为私钥不能用于加密,但是在给定私钥的情况下生成公钥并不困难。如果你有私钥,你实际上可以拥有两个密钥。
编辑2:OP,您应该查看digital signatures。您可以签署一条消息(使用私钥),然后使用公钥确认签名,我认为这正是您所要求的。
答案 1 :(得分:1)
要解码数据,您需要使用公共或私钥。取决于它是如何编码的。
坚持使用标准模式,只需注意从不分发您的私钥。
从您的评论(到各种答案),您只需要签名(哈希数据)。使用每个人都可以拥有的密钥加密数据是没有用的。
有签名的标准功能和模式。
答案 2 :(得分:1)
我认为您需要使用私钥进行解密,使用公钥进行加密。
接收方(解密器)将其公钥发送给发送方(加密方)。所以每个人都可以发送消息,只有接收者可以阅读它们。这就是你需要的吗?
如果您需要确保邮件来自某个发件人,则需要使用自己的私钥添加签名。接收方可以使用发件人公钥来验证这一点。
答案 3 :(得分:0)
如果您想确保私钥持有者无法加密某些内容,使得结果与公钥持有者发送的消息无法区分,那么您可以简单地对数据进行双重包装。
只需要两个密钥对。
A侧获取密钥对1的私钥和密钥对2的公钥。 B方获取密钥对1的公钥和密钥对2的私钥。
B方通过首先用密钥对1的公钥加密它,然后是密钥对2的私钥来发送他/她/它的消息。
A面使用密钥对2的公钥和密钥对1的私钥(按此顺序)解密结果。
A面可以生成密钥对1的公钥,但不能生成密钥对2的私钥,因此A面无法生成有效消息。
逆向工作在另一个方向。
下方:如果您有一个中心人(或服务器),其他人(或计算机)正在与之通信,则每个方都需要自己的私钥,并且他们需要与中央人员共享相应的公钥(或服务器)他们正在与之通信。