如何为RSA算法获取私钥

编程入门 行业动态 更新时间:2024-10-28 02:33:14
本文介绍了如何为RSA算法获取私钥的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

< how to =" get =" private =" kye =" for =" rsa =" algorithm =">

<how to="" get="" private="" kye="" for="" rsa="" algorithm="">

推荐答案

您必须使用私钥进行解密.您正在使用公共密钥进行加密和解密. RSA是不对称的. You have to use the private key to decrypt. You''re using public key for encrypting and decrypting. RSA is asymetric.

我举了一个小例子,其中所有的魔术仅通过一种方法发生. 我正在使用3个TextBox es来显示从通过加密的纯文本到解密的文本的路径. 文本框分别命名为textBoxPlain,textBoxEncrypted 和textBoxDecrypted. 因此,您可以轻松地打开一个新项目,只需在表单上放置3个文本框即可. textBoxEncrypted设置为多行.加密和解密全部发生在textBoxPlain_TextChanged I set up a small example where all the magic happens in just one method. I''m using 3 TextBoxes to show the path from plain text via encryption to the decrypted text. TextBoxes are named textBoxPlain,textBoxEncrypted and textBoxDecrypted. So you can quite easily open a new project and just put 3 textboxes on the form. textBoxEncrypted is set to multiline. Encrypting and decrypting all happens in textBoxPlain_TextChanged using System; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; using System.Collections; namespace EncryptionRSA { public partial class Form1 : Form { private RSACryptoServiceProvider rsaSender; private RSACryptoServiceProvider rsaReceiver; private string publicKey; private string privateKey; private int keySize = 1024; public Form1() { InitializeComponent(); rsaReceiver = new RSACryptoServiceProvider(keySize); // public key which can be spread to all senders publicKey = rsaReceiver.ToXmlString(false); // private key. Keep it secret! // the private key XML always contains public and private key privateKey = rsaReceiver.ToXmlString(true); } private void textBoxPlain_TextChanged(object sender, EventArgs e) { // sender using the public key to encrypt data rsaSender = new RSACryptoServiceProvider(); rsaSender.FromXmlString(publicKey);// "loading" public key // code from your sample byte[] bytes = Encoding.UTF32.GetBytes(textBoxPlain.Text); int maxLength = keySize/8 - 42; int dataLength = bytes.Length; int iterationsenc = dataLength / maxLength; StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i <= iterationsenc; i++) { byte[] tempBytes = new byte[(dataLength - maxLength * i > maxLength) ? maxLength : dataLength - maxLength * i]; Buffer.BlockCopy(bytes, maxLength * i, tempBytes, 0, tempBytes.Length); byte[] encryptedBytes = rsaSender.Encrypt(tempBytes, true); Array.Reverse(encryptedBytes); stringBuilder.Append(Convert.ToBase64String(encryptedBytes)); } // display encrypted data textBoxEncrypted.Text = stringBuilder.ToString(); // receiver using his privat key rsaReceiver = new RSACryptoServiceProvider(); rsaReceiver.FromXmlString(privateKey); // code from your sample int base64BlockSize = ((keySize / 8) % 3 != 0) ? (((keySize / 8) / 3) * 4) + 4 : ((keySize / 8) / 3) * 4; int iterationsdec = textBoxEncrypted.Text.Length / base64BlockSize; ArrayList arrayList = new ArrayList(); for (int i = 0; i < iterationsdec; i++) { byte[] encryptedBytes = Convert.FromBase64String(textBoxEncrypted.Text.Substring(base64BlockSize * i, base64BlockSize)); Array.Reverse(encryptedBytes); arrayList.AddRange(rsaReceiver.Decrypt(encryptedBytes, true)); } // display decrypted data textBoxDecrypted.Text = Encoding.UTF32.GetString(arrayList.ToArray(Type.GetType("System.Byte")) as byte[]); } } }

更多推荐

如何为RSA算法获取私钥

本文发布于:2023-11-29 19:12:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1647362.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:何为   算法   RSA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!