加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:17:13 所属栏目:百科 来源:网络整理
导读:我使用RSACryptoServiceProvider加密了一个文本.我导出了公钥和私钥.显然我只是想在解码器应用程序中公开公钥,所以我编写了如下代码: private const string PublicKey = "RSAKeyValueModulussIzQmj4vqK0QPd7RXKigD7Oi4GKPwvIPoiUyiKJMGP0qcbUkRPioe2psE/d3c
我使用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);”行引发异常;
并说“钥匙不存在”.但是,如果我暴露整个私钥和公钥,那么它会很愉快地运行.那么如何仅使用公钥信息解密数据呢?

解决方法

你不能 – 这是公钥/私钥加密的重点.公众进行加密;私人进行解密.

听起来你需要某种密钥交换模式.例如;如果你的解码器应用程序试图解密来自另一个数据源(源应用程序)的信息,我会实现这样的事情:

>源应用程序生成对称密钥,如AES.
>解码器应用程序生成公钥和私钥对.
>源应用程序向解码器应用程序询问公钥.
> Source应用程序使用公钥加密对称密钥,并将其发送回Decoder应用程序.
>解码器应用程序使用私钥解密对称密钥.
>解码器应用程序使用源应用程序中的对称密钥加密数据.
>解码器应用程序使用交换的对称密钥来解密收到的信息.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读