In MonoDevelop we use the Stetic GUI Designer to build the GUI!
Cool! We can build apps that runs on Linux and Windows with Monodevelop! Now over to the code of this app!
using System; using Gtk; using System.Text; using System.Security.Cryptography; using System.Security; using System.IO; public partial class MainWindow: Gtk.Window { private RSACryptoServiceProvider _rsa; private RSAParameters _rsaPrivateKey; private RSAParameters _rsaPublicKey; private byte[] _cipherBytes; private byte[] _decipherBytes; private byte[] _plainTextBytes; public MainWindow () : base ("Pango") { Application.Init (); Build (); SetupControls (); Application.Run (); } private void SetupControls(){ Gdk.Color color = new Gdk.Color (255, 30, 80); lblP.ModifyFont (Pango.FontDescription.FromString ("Purisa 10")); //lblP.ModifyBg (StateType.Normal, new Gdk.Color (255, 80, 10)); } protected void OnDeleteEvent (object sender, DeleteEventArgs a) { Application.Quit (); a.RetVal = true; } protected void btnRsaSetupClick (object sender, EventArgs e) { _rsa = new RSACryptoServiceProvider (); StringWriter writer = new StringWriter (); string rsaSetupXml = _rsa.ToXmlString (true); writer.Write (rsaSetupXml); //tbRsaSetup.Buffer.Text = writer.ToString (); writer.Close (); _rsaPrivateKey = _rsa.ExportParameters (true); _rsaPublicKey = _rsa.ExportParameters (false); SetupControls (); DisplayRsaSetup (_rsaPrivateKey); } private void DisplayRsaSetup (RSAParameters rsaParams){ try { lblPValue.Text = Convert.ToBase64String (rsaParams.P); lblQValue.Text = Convert.ToBase64String (rsaParams.Q); lblModulusValue.Text = Convert.ToBase64String (rsaParams.Modulus); lblDValue.Text = Convert.ToBase64String(rsaParams.D); lblEValue.Text = Convert.ToBase64String (rsaParams.Exponent); } catch (Exception err) { Console.WriteLine (err.Message); } } protected void btnEncryptClicked (object sender, EventArgs e) { if (_rsa == null) return; _plainTextBytes = Encoding.UTF8.GetBytes (textViewPlainText.Buffer.Text); _cipherBytes = _rsa.Encrypt (_plainTextBytes, false); textviewEncrypted.Buffer.Text = Convert.ToBase64String(_cipherBytes); } protected void btnDecryptClicked (object sender, EventArgs e) { textviewDecrypted.Buffer.Text = string.Empty; if (_rsa == null) return; if (_cipherBytes == null) return; _decipherBytes = _rsa.Decrypt (_cipherBytes, false); textviewDecrypted.Buffer.Text = Encoding.UTF8.GetString(_decipherBytes); } }
As you can see in the code, we instantiate a new RSACryptoServiceProvider instance. We use the Encrypt and Decrypt method, using the second argument set to false to not use the OAEP padding, that is the Optimal Assymetric Encryption Padding for compability. Setting false here for padding will use the PKCS# instead. PKCS stands for Public Key Cryptography Standards. I have tested also with the parameters set to true i OAEP, and it seems to work nice also with Monodevelop - so you could use both types of padding. Note that we use the ExportParameters methods of the RSACryptoServiceProvider to the the RSAParameters object. In assymetric encryption, we must guard our private key and expose our public key. This is a comprehensive demo of the RSA algorithm. We would use the ExportParameters method with the parameters set to false to not include the private key. To export the RSA parameters with more compability, you can export the parameters as XML. You can use the ToXmlString() method to export the XML as a string. You can either export the RSA parameters as a string or to a file, and you can then use the method FromXmlString() to import the RSA parameters.
{ _rsa = new RSACryptoServiceProvider (); StringWriter writer = new StringWriter (); string rsaSetupXml = _rsa.ToXmlString (true); writer.Write (rsaSetupXml); //tbRsaSetup.Buffer.Text = writer.ToString (); writer.Close ();As you can see in the code above, you can use a StringWriter to write to a string, but you can also use a FileStream to write the contents out to a file. Using the ToXmlString - you will export the information needed for a public key by setting the argument of this method to FALSE. To include private key information, you would provide the value TRUE here. In the RSA algorithm the following is belonging to the "PUBLIC Domain":
- Modulus
- Public exponent E
- Private exponent D
- Prime P
- Prime Q
tar xjvf Symmetric.tar.bz2 Just so you know: tar - Tape ARchiver And the options: x - extract v - verbose output (lists all files as they are extracted) j - deal with bzipped file f - read from a file, rather than a tape device "tar --help" will give you more options and info After unpacking, just open the solution in MonoDevelop.So .NET Developers - Start your engines - Start developing for Linux!