“糟糕的提供商版本。”使用RSACryptoServiceProvider加载公钥时

时间:2015-04-16 16:22:02

标签: c# rsa encryption-asymmetric rsacryptoserviceprovider

我正在使用AsymmetricKeyAlgorithmProviderWindows.Security.Cryptography.Core)创建RSA密钥对,并导出密钥,如下所示:

  AsymmetricKeyAlgorithmProvider rsaGenKeys = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);

  CryptographicKey keyPair = rsaGenKeys.CreateKeyPair(2048);
  byte[] privateKeyBlob = keyPair.Export(CryptographicPrivateKeyBlobType.Pkcs1RsaPrivateKey).ToArray();

  string privateKeyBlobStr = Convert.ToBase64String(privateKeyBlob);

  byte[] publicKeyBlob = keyPair.ExportPublicKey().ToArray();

  string pubilcKeyBlobStr = Convert.ToBase64String(publicKeyBlob);

现在,此数据的接收方恰好是Silverlight应用,并使用RSACryptoServiceProviderSystem.Security.Cryptography)加载此公钥:

RSACryptoServiceProvider rsaPublic = new RSACryptoServiceProvider();
byte[] keyBlobBytes = Convert.FromBase64String(keyBlob);
rsaPublic.ImportCspBlob(keyBlobBytes);

其中keyBlob是具有公钥的字节数组。 问题是,当调用ImportCspBlob时,它会抛出异常,说"提供商的错误版本。"

1 个答案:

答案 0 :(得分:1)

我有同样的错误。出于某种原因,FxSSH 不喜欢我生成的公共 RSA 密钥。我不得不使用 https://github.com/Aimeast/FxSsh 自述文件中的 RSA 密钥。