具有私钥加密的公钥加密

时间:2013-04-13 15:26:02

标签: c# encryption cryptography key public

我正在尝试在C#中实现以下内容:

我想要一个内部包含公钥加密例程的Generator。它可以采用提供给它的字节数组(通常由下面描述的客户端)并使用其私钥加密它。

客户端具有与Generator共享的公钥。它从Generator获取结果并使用公钥解密它。它需要最初提供给Generator的字节数组,并比较结果以查看它们是否排列。这个想法是,如果它们匹配,它能够在某种程度上确定生成加密字节的人拥有私钥。它还能够验证特定加密值是否与其提供的数据相对应。

我所看到的大多数内置C#公钥加密库都希望将私钥与解密关联起来(例如RSACryptoServiceProvider)。我可以理解为什么,因为很多场景涉及保护进程的解密端而不是加密。是否有任何C#库可以直接保护加密过程?我整个上午都试着看过Bouncy Castle,但是我很难让它在基本场景下工作。文档遗留了一些东西......

同样,我的主要目标是确保产生加密的任何东西都拥有私钥。客户端还必须确保Generator的结果与其提供的信息相对应。如果有一些我缺少的替代方法可能更好地符合可用库,我会全力以赴:)

1 个答案:

答案 0 :(得分:4)

你写道:

  

同样,我的主要目标是确保产生的任何东西   加密拥有私钥。

如CodesInChaos所述,您可以正确使用签名来实现此目的。通常使用签名来验证某些数据是由持有某个私钥的人生成的,但是在这里您可以使用它来验证密钥持有者本人。如果您要求他签署您制作的内容,您可以使用签名支票检查他是否拥有与您的公钥相对应的私钥。

签名实际上是通过对某些数据进行单向散列,然后使用私钥加密此散列来实现的。然后,可以使用公钥来验证签名,方法是解密哈希并将其与重新计算的数据哈希值进行比较。只有拥有私钥的人才能制作哈希的加密版本。首先要排序你打算做什么。