none
有關rsa的問題 RRS feed

  • 一般討論

  • 各位大大你們好

     using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Security.Cryptography;

    namespace key
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }

            public string bobPrivateKey;
            public string bobPublicKey;

            private void Form2_Load(object sender, EventArgs e)
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                bobPrivateKey = rsa.ToXmlString(true);
                bobPublicKey = rsa.ToXmlString(false);
            }
           
            private void btnDecrypt_Click(object sender, EventArgs e)
            {
               
                //Form1 f1 = new Form1();
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

                string orgText = "AOI7300";
                byte[] orgData = Encoding.Default.GetBytes(orgText);
                byte[] encryptedData = rsa.Encrypt(orgData, false);


                // 建立 RSA 加解密物件。

                // 將私密金鑰匯入 RSA 物件。
                rsa.FromXmlString(bobPrivateKey);
             
               
                // 解密。
                byte[] decryptedData = rsa.Decrypt(encryptedData, false);//要解Form1上的txtEncrypted密(false 表示不用OAEP進行填充,只有WinXp以上版本的*作系統才需要)
                txtDecrypted.Text = Encoding.Default.GetString(decryptedData);
              
            }
        }
    }

    以上的程式我又另外做了修改不過錯誤還是一樣

    在這一行中byte[] decryptedData = rsa.Decrypt(encryptedData, false);還是會顯示資料錯誤的訊息

    debug時他說decryptedData是空的內容

    但是debug rsa.Decrypt(encryptedData, false);是有內容的

     

    我的問題是為什麼byte[] decryptedData = rsa.Decrypt(encryptedData, false);這一行有錯
    而我這一行是要解Form1上的txtEncrypted密  

     

    上述的程式

    這是form2底下的程式

    先產生form1rsa的公開金鑰再利用form2裡的decrypted去解碼產生的訊息放入到txtDecrypted裡面

     

    那麼我要如何去修改它

     

    可不可以請各位大大教導一下

    2008年6月16日 上午 10:37

所有回覆

  • HI,

     

    您的意思是:

    byte[] encryptedData = Convert.FromBase64String(f1.txtEncrypted.Text);

    這一行用到的f1.txtEncrypted.Text有資料, 而且也轉到encryptedData陣列了, 但是這樣寫的意思是f1.txtEncrypted.Text的原內容是Base64格式的字串, 不是一般的字串, 請確定一下字串的格式是否正確

     

    tihs

    2008年6月18日 上午 06:42
  •  

    byte[] encryptedData = Convert.FromBase64String(f1.txtEncrypted.Text);

    在這一行裡他只能使用FromBase64String的格式

    然而在解密的這一行裡byte[] decryptedData = rsa.Decrypt(encryptedData, false);

    encryptedData讀不到資料

    然後在debug時

    會顯示資料錯誤的對話框

    2008年6月18日 上午 07:13
  •  天 寫信:

     

    byte[] encryptedData = Convert.FromBase64String(f1.txtEncrypted.Text);

    在這一行裡他只能使用FromBase64String的格式

    然而在解密的這一行裡byte[] decryptedData = rsa.Decrypt(encryptedData, false);

    encryptedData讀不到資料

    然後在debug時

    會顯示資料錯誤的對話框

     

    這個舊問題已解決

    不過上面的是新問題(程式碼那段)

     

    2008年6月19日 上午 12:49
  • HI,

     

    新問題是什麼? 有點看不懂新問題和舊問題的差別

     

    tihs

    2008年6月19日 上午 02:41
  • 謝謝大大的提醒

    因為少加了幾句話

    不好意思

    而舊問題是指encryptedData讀不到資料的

    後來改過了

    不過新問題方面我又加上面程式碼所述說的

     

    2008年6月19日 上午 03:47
  • 請勿擅自修改首篇貼文中的內容,這樣不但需要參考的人無法由過去回應中找到蛛絲馬跡,也會讓回答的人無法了解你的問題。 要變更問題內容,除非還沒有人回應,否則就接在回應下做補充,省得回答的人認為你問問題的態度很隨便。
    2008年6月19日 上午 03:48
    版主
  • 了解

    我把過去的程式補上

    不好意思

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Security.Cryptography;

    namespace key
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }

            public string bobPrivateKey;
            public string bobPublicKey;

            private void Form2_Load(object sender, EventArgs e)
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                bobPrivateKey = rsa.ToXmlString(true);
                bobPublicKey = rsa.ToXmlString(false);
            }
           
            private void btnDecrypt_Click(object sender, EventArgs e)
            {
               
                Form1 f1 = new Form1();
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
              
                
                // 將私密金鑰匯入 RSA 物件。
                rsa.FromXmlString(bobPrivateKey);
                byte[] encryptedData = Convert.FromBase64String(f1.txtEncrypted.Text);

                // 解密。
                byte[] decryptedData = rsa.Decrypt(encryptedData, false);//要解Form1上的txtEncrypted密(false 表示不用OAEP

                                                                                                   //進行填充,只有WinXp以上版本的*作系統才需要)
                txtDecrypted.Text = Encoding.Default.GetString(decryptedData);
              
            }
        }
    }

    2008年6月19日 上午 04:05
  • 各位大大你們好

    我又另外寫一個程式

    我在Form1.cs底下的程式

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Security.Cryptography;


    namespace key_textbox1_send_textbox2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

          
            public string bobPrivateKey;
            public string bobPublicKey;
       

            private void Form1_Load(object sender, EventArgs e)
            {
                //產生Bob的金鑰對
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                bobPrivateKey = rsa.ToXmlString(true);
                bobPublicKey = rsa.ToXmlString(false);
            }
           
           
            Form2 f2 = new Form2();
            public string g_send
            {
                get { return f2.textBox1.Text; }
            }
            public string s_send
            {
                set { f2.textBox1.Text = value; }
            }
           
            private void btnEncrypted_Click(object sender, EventArgs e)
            {
                // 建立 RSA 加解密物件。
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

                // 匯入公開金鑰(因為要使用接收者的公鑰加密)。
                rsa.FromXmlString(bobPublicKey);

                // 欲加密的原文。
                string orgText = "AOI7300";

                // 加密。
                byte[] orgData = Encoding.Default.GetBytes(orgText);
                byte[] encryptedData = rsa.Encrypt(orgData, false);

                // 將加密過的文字顯示於 UI。
                txtEncrypted.Text = Convert.ToBase64String(encryptedData);

                f2.textBox1.Text = txtEncrypted.Text;
                f2.textBox1.Text = Convert.ToBase64String(encryptedData);
                f2.ShowDialog();
            }
       
           

            private void txtEncrypted_TextChanged(object sender, EventArgs e)
            {

            }
        }
    }

    這是Form2.cs底下的程式

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Security.Cryptography;

    namespace key_textbox1_send_textbox2
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }

            public string bobPrivateKey;
            public string bobPublicKey;
           
            private void Form2_Load(object sender, EventArgs e)
            {
               
                //產生Bob的金鑰對
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                bobPrivateKey = rsa.ToXmlString(true);
                bobPublicKey = rsa.ToXmlString(false);
               
            }

          
            private void textBox1_TextChanged(object sender, EventArgs e)
            {

                Form1 f1 = new Form1();
                textBox1.Show();
               
            }

            private void btn_Decrypted_Click(object sender, EventArgs e)
            {
                        
               // 建立 RSA 加解密物件。
               RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
              
               // 將私密金鑰匯入 RSA 物件。
               rsa.FromXmlString(bobPrivateKey);
    *           byte[] encryptedData = Convert.FromBase64String(textBox1.Text);
              
               // 解密。
    *           byte[] decryptedData = rsa.Decrypt(encryptedData, false);
    *           txtDecrypted.Text = Encoding.Default.GetString(decryptedData);

              
              
            }
        }
    }


    有趣的地方來了debug時

    打星號的程式行數裡面第二個地方會顯示錯誤訊息

    而且顯示的訊息較資料錯誤

    可以當這兩個程式寫在同一個Form底下

    是完全對的

     

    這就是我解不開的地方

    我不知道為什麼會這樣

    請各位大大不吝教導一下

    2008年6月23日 上午 06:07
  • 我在FORM2.CS底下

    改成

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Security.Cryptography;

    namespace key_textbox1_send_textbox2
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }

            public string bobPrivateKey;
            public string bobPublicKey;
           
            private void Form2_Load(object sender, EventArgs e)
            {
               
                //產生Bob的金鑰對
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                bobPrivateKey = rsa.ToXmlString(true);
                bobPublicKey = rsa.ToXmlString(false);
               
            }     
           
            private void textBox1_TextChanged(object sender, EventArgs e)
            {

                textBox1.Show();
               
            }

            public Form1 f1;

            public string g_send
            {
                get { return f1.txtEncrypted.Text; }
            }
            public string s_send
            {
                set { f1.txtEncrypted.Text = value; }
            }

            public RSACryptoServiceProvider rsa;
           
            private void btn_Decrypted_Click(object sender, EventArgs e)
            {
                textBox1.Text = f1.txtEncrypted.Text;

                byte[] encrytedData = Convert.FromBase64String(textBox1.Text); 
                      
                // 解密。
                byte[] decryptedData = rsa.Decrypt(encrytedData, false);
                txtDecrypted.Text = Encoding.Default.GetString(decryptedData);
              
            }
        }
    }

    在 textBox1.Text = f1.txtEncrypted.Text; 這一行

    出現了Object reference not set to an instance of an object.這樣的錯誤

    請問要怎麼改

    是否可以請各位大大提示一下

    2008年6月30日 上午 10:30
  • 這問題已解決

    請各位大大不用再回覆此文章

    2008年7月1日 上午 06:49