gpt4 book ai didi

c# - 如何使用 RSACryptoServiceProvider 解密加密文本?

转载 作者:行者123 更新时间:2023-11-30 13:24:02 26 4
gpt4 key购买 nike

我使用 RSACryptoServiceProvider 加密了一段文本。我导出了公钥和私钥。显然我只是想在解码器应用程序中公开公钥,所以我编写了如下代码:

private const string PublicKey = "<RSAKeyValue><Modulus>sIzQmj4vqK0QPd7RXKigD7Oi4GKPwvIPoiUyiKJMGP0qcbUkRPioe2psE/d3c1a2NY9oj4Da2y1qetjvKKFad2QAhXuql/gPIb1WmI+f6q555GClvHWEjrJrD/ho7SLoHbWd6oY6fY609N28lWJUYO97RLVaeg2jfNAUSu5bGC8=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

private string Decrypt()
{
byte[] encryptedKeyAsBytes = Convert.FromBase64String(_encryptedKey);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(PublicKey);
// read ciphertext, decrypt it to plaintext
byte[] plainBytes = rsa.Decrypt(encryptedKeyAsBytes, false);
string plainText = System.Text.Encoding.ASCII.GetString(plainBytes);

return plainText;
}

但是在“byte[] plainBytes = rsa.Decrypt(encryptedKeyAsBytes, false);”行抛出异常并说“ key 不存在”。但是,如果我公开整个私钥和公钥,那么它就会愉快地运行。那么如何只使用公钥信息解密数据呢?

最佳答案

你不能——这就是公钥/私钥加密的意义所在。公众进行加密;私有(private)进行解密。

听起来您需要某种 key 交换模式。例如;如果您的解码器应用程序试图解密来自另一个数据源(源应用程序)的信息,我将实现如下内容:

  1. 源应用程序生成一个对称 key ,例如 AES。
  2. 解码器应用生成一对公钥和私钥。
  3. 源应用程序向解码器应用程序询问公钥。
  4. Source 应用程序使用公钥加密对称 key ,并将其发送回 Decoder 应用程序。
  5. 解码器应用程序使用私钥解密对称 key 。
  6. 解码器应用程序从源应用程序获取使用对称 key 加密的数据。
  7. 解码器应用程序使用交换的对称 key 来解密它收到的信息。

这只是一个例子;但说明了如何在两个应用程序之间交换数据而无需通过网络传输任何敏感信息的基础知识。根本不需要对称 key ;但这是一种非常常见的模式,因为 RSA 在加密大量信息时开始引入问题。 RSA 最好只加密对称加密 key 。

关于c# - 如何使用 RSACryptoServiceProvider 解密加密文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com