private void button3_Click(object sender, EventArgs e) { using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "xml|*.xml" }) { if (ofd.ShowDialog() == DialogResult.Cancel) { return; } try { var rsa = new advRSA(); using (var sr = new StreamReader(ofd.FileName)) rsa.FromXmlString(sr.ReadToEnd()); txtE.Text = rsa.E.ToString(); txtD.Text = rsa.D.ToString(); txtN.Text = rsa.N.ToString(); } catch (FileNotFoundException) { MessageBox.Show("File not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception ex) { MessageBox.Show("File is incorrect.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); ex.Log(); } } }
public virtual void SaveRSA(advRSA rsa) { using (MemoryStream MemStream = new MemoryStream()) { short head = (short)(rsa.N.GetByteCount() / 4 - 32); if (head > 127) { throw new Exception("N is too big."); } head |= (short)(rsa.E.GetByteCount() << 8); head |= 0x80; // RSA flag MemStream.Write(BitConverter.GetBytes(head), 0, 2); byte[] data = GetSaveData(); var hash = SHA512.Create().ComputeHash(data); hash = rsa.GetSignature(hash); MemStream.Write(BitConverter.GetBytes((short)(hash.Length)), 0, 2); var key = rsa.N.ToByteArray(); MemStream.Write(key, 0, key.Length); key = rsa.E.ToByteArray(); MemStream.Write(key, 0, key.Length); MemStream.Write(hash, 0, hash.Length); MemStream.Write(data, 0, data.Length); MemStream.Seek(0, SeekOrigin.Begin); using (FileStream fs = new FileStream(FileName, FileMode.Create)) { using (GZipStream ZipStream = new GZipStream(fs, CompressionMode.Compress)) { MemStream.CopyTo(ZipStream); } } } }
public static DialogResult GetKeys(ref advRSA rsa) { using (var frm = new frmKeyDialog()) { frm.ShowDialog(); if (frm.result == DialogResult.OK) { rsa.E = BigInteger.Parse(frm.txtE.Text); rsa.D = BigInteger.Parse(frm.txtD.Text); rsa.N = BigInteger.Parse(frm.txtN.Text); } return(frm.result); } }