c# - 带有私钥加密的公钥加密

标签 c# encryption cryptography key public

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

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

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

我看到的大多数内置 C# 公钥加密库都希望将私钥与解密相关联(例如 RSACryptoServiceProvider)。我明白为什么,因为很多场景涉及保护过程的解密端而不是加密。是否有任何 C# 库可以直接保护加密过程?我整个早上都在尝试查看 Bouncy CaSTLe,但我很难让它在基本场景中发挥作用。该文档还有一些不足之处...

再说一遍,我的主要目标是确保无论产生什么加密,都拥有私钥。客户端还必须确保生成器的结果与其提供的信息相对应。如果我缺少可能更好地符合可用库的替代方法,我会洗耳恭听:)

最佳答案

你写:

Again, my main goal is to make sure that whatever produced the encryption possesses the private key.

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

签名实际上是通过对一些数据进行单向哈希,然后使用私钥加密该哈希来工作的。然后可以使用公钥来验证签名,方法是解密散列并将其与重新计算的数据散列值进行比较。只有拥有私钥的人才能生成哈希的加密版本。这就是你最初打算做的事情。

关于c# - 带有私钥加密的公钥加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989399/

相关文章:

c# - 写入文本文件并读取该文本文件

C# FFT 实现没有产生预期的结果

c# - 创建新的调度程序

javascript - 如何对隐藏的js脚本进行逆向工程?

python - ValueError : AES key must be either 16, 24 或 32 字节长

c - RSA 加密的 OpenSSL 可变长度结果 [C 编程]

c - 通过 C 中的文件使用 crypt 函数进行身份验证(段错误)

php - 在 openssl_random_pseudo_bytes 的输出上使用 bin2hex() 是否安全?

c# - 我可以为多选组合框创建 SelectedItems 属性吗

java - 服务器无法解密Android 4.2发送的消息