Member 14130699 Ответов: 1

Что не так с моим кодом? С#


Это мой код в program.cs:
 static void Main(string[] arg)
        {
            Boolean bCreatedNew;
            Mutex m = new Mutex(false, "schoolProject", out bCreatedNew);
            m.WaitOne();
            GC.Collect();
            if (!bCreatedNew) return;
            m.ReleaseMutex();
           
            System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Highest;
            Byte[] myKey = AES.generateKey();
            string result = System.Text.Encoding.UTF8.GetString(myKey);
            RSACryptoServiceProvider RSAObj = new RSACryptoServiceProvider();
            File.WriteAllText("rsa.txt", RSAObj.ToXmlString(true));
            File.WriteAllBytes("aes.txt", RSAObj.Encrypt(myKey, false));
            encryptAll(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), myKey);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 form1 = new Form1();
            form1.RSAObj(result);
            Application.Run(form1);

            
            
        }
    }
}


А это мой код в форме 1:
public void RSAObj(string value)
       {
           textBox1.Text = value;
       }


Как вы можете видеть, эта программа создает два текстовых документа, один с RSA, а другой с ключом AES, который шифруется RSA, и отправляет ключ AES в текстовое поле в форме 1. Проблема в том, что я получаю не ключ AES в текстовом поле, а случайный мусор, например: "6Ea � � � x�) XL�F". Почему? Как вы можете видеть я преобразовал байты в строку чтобы отправить ключ AES в текстовое поле Form 1:
Byte[] myKey = AES.generateKey();
string result = System.Text.Encoding.UTF8.GetString(myKey); 
Я попытался заставить программу отправить ключ RSA в текстовое поле в форме 1, и это сработало, изменив:
form1.RSAObj(result);
к
form1.RSAObj(RSAObj.ToXmlString(true));
Но как я могу заставить его отправить ключ AES?

Что я уже пробовал:


Dave Kreskowiak

Я почти боюсь спрашивать, но что это за мьютекс и вызов GC?Собирать?

Серьезно, похоже, что вы копируете и вставляете код из интернета, не имея ни малейшего представления о том, что он делает и как работает.

1 Ответов

Рейтинг:
7

Richard MacCutchan

Да, у вас есть ключ AES. Просто многие байты не являются печатаемыми буквенно-цифровыми символами. Вы должны понимать, что байт может иметь любое значение от 0 до 255, и только некоторые из этих значений приравниваются к печатным символам. Google найдет вам полный набор.

Учитывая, что это, по-видимому, школьный проект, вы, похоже, пропустили некоторые основные сведения в своем курсе.