.net中RSA加密解密

论坛 期权论坛     
选择匿名的用户   2021-5-23 19:53   75   0
<div class="blogpost-body" id="cnblogs_post_body">
<p>1、产生密钥:</p>
<div class="cnblogs_code">
  <pre class="blockcode"><span style="color:#0000ff;">private</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span><span style="color:#000000;"> CreateKey()
        {
            </span><span style="color:#0000ff;">using</span> (RSACryptoServiceProvider rsa &#61; <span style="color:#0000ff;">new</span><span style="color:#000000;"> RSACryptoServiceProvider())
            {
                </span><span style="color:#0000ff;">string</span> publicKey &#61; rsa.ToXmlString(<span style="color:#0000ff;">false</span>); <span style="color:#008000;">//</span><span style="color:#008000;"> 公钥</span>
                <span style="color:#0000ff;">string</span> privateKey &#61; rsa.ToXmlString(<span style="color:#0000ff;">true</span>); <span style="color:#008000;">//</span><span style="color:#008000;"> 私钥               </span>
<span style="color:#000000;">            }
        }</span></pre>
</div>
<p>这里产生的密钥是xml格式的,这也是.net的rsa的密钥格式。但有时候在.net项目中,我们只有java格式的密钥,具体的来说密钥就是一个字符串,这时候需要将其转换为xml格式的。</p>
<div class="cnblogs_code">
  <pre class="blockcode"><span style="color:#008000;">//</span><span style="color:#008000;">公钥格式的转换</span>
<span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">string</span> RsaPublicKeyToXml(<span style="color:#0000ff;">string</span><span style="color:#000000;"> publicKey)
        {
            </span><span style="color:#0000ff;">try</span><span style="color:#000000;">
            {
                </span><span style="color:#0000ff;">if</span> (<span style="color:#0000ff;">string</span><span style="color:#000000;">.IsNullOrWhiteSpace(publicKey))
                    </span><span style="color:#0000ff;">return</span> <span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">;
                </span><span style="color:#0000ff;">if</span> (publicKey.Contains(<span style="color:#800000;">&#34;</span><span style="color:#800000;">&lt;RSAKeyValue&gt;</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">))
                    </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> publicKey;
                RsaKeyParameters publicKeyParam;
                </span><span style="color:#008000;">//</span><span style="color:#008000;">尝试进行java格式的密钥读取</span>
                <span style="color:#0000ff;">try</span><span style="color:#000000;">
                {
                    publicKeyParam </span>&#61;<span style="color:#000000;"> (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
                }
                </span><span style="color:#0000ff;">catch</span><span style="color:#000000;">
                {
                    publicKeyParam </span>&#61; <span style="color:#0000ff;">null</span><span style="color:#000000;">;
                }
                </span><span style="color:#008000;">//</span><span style="color:#008000;">非java格式密钥进行pem格式的密钥读取</span>
                <span style="color:#0000ff;">if</span> (publicKeyParam &#61;&#61; <span style="color:#0000ff;">null</span><span style="color:#000000;">)
                {
                    </span><span style="color:#0000ff;">try</span><span style="color:#000000;">
                    {
                        </span><span style="color:#0000ff;">var</span> pemKey &#61;<span style="color:#000000;"> publicKey;
                        </span><span style="color:#0000ff;">if</span> (!pemKey.Contains(<span style="color:#800000;">&#34;</span><span style="color:#800000;">BEGIN RSA PRIVATE KEY</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">))
                        {
                            pemKey </span>&#61; <span style="color:#800000;">&#64;&#34;</span><span style="color:#800000;">-----BEGIN RSA PRIVATE KEY-----
                           </span><span style="color:#800000;">&#34;</span> &#43; publicKey &#43; <span style="color:#800000;">&#64;&#34;</span><span style="color:#800000;">
                           -----END RSA PRIVATE KEY-----</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">;
                        }
                        </span><span style="color:#0000ff;">var</span> array &#61;<span style="color:#000000;"> Encoding.ASCII.GetBytes(pemKey);
                        </span><span style="color:#0000ff;">var</span> stream &#61; <span style="color:#0000ff;">new</span><span style="color:#000000;"> MemoryStream(array);
                        </span><span style="color:#0000ff;">var</span> reader &#61; <span style="color:#0000ff;">new</span><span style="color:#000000;"> StreamReader(stream);
                        </span><span style="color:#0000ff;">var</span> pemReader &#61; <span style="color:#0000ff;">new</span><span style="color:#000000;"> Org.BouncyCastle.OpenSsl.PemReader(reader);
                        publicKeyParam </span>&#61;<span style="color:#000000;"> (RsaKeyParameters)pemReader.ReadObject();
                    }
                    </span><span style="color:#0000ff;">catch</span><span style="color:#000000;">
                    {
                        publ
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP