c# - 将 ssh-keys 转换为 c# 格式以在 Windows (c#) 中加密并在 Linux (python/shell) 中解密

标签 c# python encryption rsacryptoserviceprovider ssh-keygen

我在 Centos 机器上使用 ssh-keygen 生成了公钥和私钥对。 我需要将公钥转换为 c# 可以理解的某种格式(XML?),以便 c# 中的 Windows 应用程序可以加密消息,Centos 应用程序(python/shell)可以使用相应的私钥解密消息。如何完成这种转换?

我的示例 key 是:

公钥:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnq2b0d3fbUMTN85q0xhHH2grdwwmg/8+1Efu2rKLAN1RiqHnov9wgRpL+l0cK5xpS7Z03+Up81HTJWxfH39WW18K+u3I6gyMBcrLaCdB/mWdJ1ayo0gdUiSz7TNDC1AR1S0BORET0oawF0BrhcYabzegQ1cpiQ4dfiQT9s3fupvQF/ZM5fSLFMK3w8wHxvtZoGGJR3K6aawIdWvz/kP0Tz9XXzr3WSrj6OApiACB/X2AvO0bIXvbVrIOsE74kseVBx2jsdVQeJuwN9EPbj4B6EyPaCNeok3Ua/vBNnxGFYIgS4QXPLXh8TXOKu+GI9QQ5Fl2lHRWh82rjMCsv88Wcw== test@local

私钥:

-----BEGIN PRIVATE KEY-----
MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQCerZvR3d9tQxM3
zmrTGEcfaCt3DCaD/z7UR+7asosA3VGKoeei/3CBGkv6XRwrnGlLtnTf5SnzUdMl
bF8ff1ZbXwr67cjqDIwFystoJ0H+ZZ0nVrKjSB1SJLPtM0MLUBHVLQE5ERPShrAX
QGuFxhpvN6BDVymJDh1+JBP2zd+6m9AX9kzl9IsUwrfDzAfG+1mgYYlHcrpprAh1
a/P+Q/RPP1dfOvdZKuPo4CmIAIH9fYC87Rshe9tWsg6wTviSx5UHHaOx1VB4m7A3
0Q9uPgHoTI9oI16iTdRr+8E2fEYVgiBLhBc8teHxNc4q74Yj1BDkWXaUdFaHzauM
wKy/zxZzAgEjAoIBAFYjuvzmKNTp5dx3Xo/Z+rlHLYnExHOKj9JS72DHUsX0fLj4
zjPpwLsc52qnkvMaZQvYE498Zzrx56aZ6n7QGO/F4WOlp5T/fzZYJUcrQRUSlyP7
3VFTCJpOcE2Q20CnzyqUxiZLGWOoM7TZ0/gptpQlguK6Sb9uEAKl3vOxlrXBcZHp
LQ+CUdixgtq9m5Fmq1rcZtX53m7bp/5DH7P5uTuNan37Um0zqZJjgQM91wwKXK63
Cv/DErTSWdGeSMSdDkzal8/MzD1NkUf153E7RVMKkrHELH+vo+b+06cGzA4lrYQq
MfCFaiW6y2NKlFmfBGopyh+T6HAhOdF7cbgChSMCgYEAycRoCg9X5WZEzBAWXr5X
69BDHPua5EFbi4PyWks0oIlGDCNTH2LMdokx/RRv3nfc/j6RKoJ1LzmfOJoG/+Iw
AH9QyeSQ6881wTlGBlRxweZ/GcrglQMrwDQHjVMoO6jmC5umfaFre8rBN5EJhFEF
TKsIxU4LZoqJTyp5n1cq3WUCgYEAyVQ/CseEKdvzjt1l202i7sptePeSSeLWzjgL
bMXXhUrMXqStF7PxyTcR0wHN4XzrvNC56dVb9XGqS5QkZSt2REsRwiYOgKRC1eXG
DerlzcclxbQcyH4G88RUrgB9ahynhDWq0dLAbLiISFxBrS23UE1UjcjfNlciGkwt
wqni8vcCgYBK8S31G6RN5CguiaHorRlXln9T6Gy7Ljfx/c8LmEa/SO4hw/pNfHfU
QZY5bf2qZwjwuCdKTbZ/QUnEkPtJGX+LJ/lvj2kHIRP3T8mNUpCnGxlEGCeHzfpO
tD1Rv80deT+Ap4b7dnhhLg1AhlP98jUrGvShDlwBg+nbk28Aq1kQZwKBgEUG8QsC
k7aUjgUYtTU/MIxiqTDJ6QNjt1ylgEKM+W+HXAMxJWc2YYbRDWzqrPzaX3PvyraS
S2oYV6TiVZ8HlkNM8CVO4Gaet9ROx4++QClLl+wDPRGKS4bG+HYsDb37Mh6zUIJ0
JLePubJoxg99Y2v9QY+ylaw7IaKdxoviebJjAoGAZNYtOpG3b9IIIGRvEyfC2m5b
v1+6QggQ/1AThLdSpBaR/mU+rQ120aUcNc60aLILmoub+DjRwoDHuO9Qnu4krwJI
WOV9mrBEJfcuNT+dDDJ2MGFqBSwitH2CenTWvbyCMfXOB7Bn8PqMlW5M/6AVv/Nf
lytOwERMgIc67pKkC+c=
-----END PRIVATE KEY-----

我能够使用以下方法从私钥中提取 PEM 格式的公钥:

openssl rsa -in myPrivateKey -pubout > PublicKey.x509


-----BEGIN PUBLIC KEY-----
MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAnq2b0d3fbUMTN85q0xhH
H2grdwwmg/8+1Efu2rKLAN1RiqHnov9wgRpL+l0cK5xpS7Z03+Up81HTJWxfH39W
W18K+u3I6gyMBcrLaCdB/mWdJ1ayo0gdUiSz7TNDC1AR1S0BORET0oawF0BrhcYa
bzegQ1cpiQ4dfiQT9s3fupvQF/ZM5fSLFMK3w8wHxvtZoGGJR3K6aawIdWvz/kP0
Tz9XXzr3WSrj6OApiACB/X2AvO0bIXvbVrIOsE74kseVBx2jsdVQeJuwN9EPbj4B
6EyPaCNeok3Ua/vBNnxGFYIgS4QXPLXh8TXOKu+GI9QQ5Fl2lHRWh82rjMCsv88W
cwIBIw==
-----END PUBLIC KEY-----

我在 Windows 机器上所能拥有的只是我的公钥,因此要在 C# 中加密消息,我应该拥有 XML 格式的公钥,以便使用 RSACryptoServiceProvider 类加载它。使用 X509Certificate2 等其他方法将需要证书形式的公钥和私钥。鉴于我只有 ssh 格式的公钥,我该如何在 C# 中进行加密?相同的字符串需要在 Linux 端使用相应的私钥解密。

谢谢!

最佳答案

我找到了 this C# source它显示了如何读取 PEM 公钥(即从 BEGIN PUBLIC KEY)并从中构建一个 RSACryptoServiceProvider(查找方法 DecodeX509PublicKey)。我自己还没有尝试过这段代码,但它是一个起点。

关于c# - 将 ssh-keys 转换为 c# 格式以在 Windows (c#) 中加密并在 Linux (python/shell) 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25815206/

相关文章:

java - 如何保护我的 Java AES 加密 key

javascript - 为什么使用 Android 和 JavaScript 在 AES/CBC/ZeroBytePadding 中加密会为某些字符串返回不同的结果?

c# - 强制终止进程

python生成器时间复杂度混淆

c# - 如何修复错误 CS1738 命名参数规范必须在指定所有固定参数后出现

python - Scrapy 和 Twisted 错误

python - 这行代码中的[0]是什么意思?

c# - 允许使用 AES 256 为 HMAC 解密任何数据

c# - 如何针对术语优化此 SharePoint 查询?

c# - 如何将 "/x"选项参数合并到 .NET 控制台应用程序中?