使用预先存在的 RSA SSH 密钥解密 C# 中的文本

Posted

技术标签:

【中文标题】使用预先存在的 RSA SSH 密钥解密 C# 中的文本【英文标题】:Use preexisting RSA SSH keys to decrypt a text in C# 【发布时间】:2013-04-11 13:10:51 【问题描述】:

我有一对由 Linux 计算机中的“ssh-keygen”命令生成的 RSA 公钥/私钥。这台 Linux 计算机中有一个 Ruby 应用程序,它使用这个公钥加密一个字符串,我想用这个私钥解密 Windows C#/.Net 应用程序中的字符串。我看了一下 Bouncy Castle 库,但没有成功。任何示例或提示都会有所帮助。谢谢!

【问题讨论】:

SSH 中的 RSA 密钥仅用于对数据进行签名以验证身份,而不用于加密会话数据甚至交换会话密钥。使用它们来加密数据并不是最佳实践。 【参考方案1】:

有理由使用 ssh 密钥吗?

任何 RSA 密钥都足够了。您需要提取 RSA 密钥来加密任何内容。如果该密钥不是 RSA,则您无法加密任何内容,因为 DSA 是仅签名算法。有公钥的 RFC:http://www.ietf.org/rfc/rfc4716.txt 这不是您所需要的。但可能会帮助您了解如何提取每个部分。它应该只是 base64 编码的二进制块。

你可以试试 PuTTY 源码http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html keygen 可以生成和转换这些密钥。所以,如果你找到它提取 RSA 密钥的地方。然后使用任何加密库使用密钥和数据计算 RSA。使用正确的键,您将获得输入数据 + 填充。取决于 ruby​​ 程序使用的是公钥还是私钥。希望对您有所帮助。

【讨论】:

因为我更喜欢使用开放标准。我的 Ruby 代码 (pastebin.com/1djhPRxN) 可以在两种方式(加密和解密)中完美运行。我想用我的 C#/.Net 代码获得相同的结果。

以上是关于使用预先存在的 RSA SSH 密钥解密 C# 中的文本的主要内容,如果未能解决你的问题,请参考以下文章

全面解决.Net与Java互通时的RSA加解密问题,使用PEM格式的密钥文件

尝试使用 RSA 解密时密钥不存在

非对称加密RSA的C#实现

C# RSA加密解密

一文搞懂 RSA 算法

ssh密钥原理