I need to encrypt some data in my program, so I've created 2 functions to
encrypt and decrypt data. I've created a simple program to test it, and...
it crashes. It wors ok on XP, but on win98 it generates an exception
(padding is invalid and cannot be removed)
When I change coding of chars from Unicode, to utf8 or 7, it does not work
even under XP. what can I do, for it to work on XP and win98??
this is the program
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Security.Cryptography;
using System.IO;
using System.Text;
namespace Crypto
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private SymmetricAlgorithm sa;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
sa=RijndaelManaged.Create();
sa.Key=new byte[]{0x57, 0x91, 0xC6, 0x2C, 0x72, 0x8C, 0xC0, 0xA1, 0xED,
0x23,
0x60, 0x1C, 0x6B, 0x05, 0x62, 0xE4, 0xB2, 0x80, 0xF3, 0xF1,
0xA3, 0x55, 0xF1, 0x9A, 0x6A, 0x7D, 0x03, 0x21, 0xC1, 0x98, 0x29, 0xBD};
sa.IV=new byte[]{0xFD, 0x50, 0xD4, 0x67, 0x56, 0x78, 0x06, 0xB4, 0x70, 0x83,
0xD0, 0xCD, 0xFC, 0xA5, 0x05, 0x20};
sa.Mode=CipherMode.ECB;
sa.Padding=PaddingMode.PKCS7;
}
private string Cipher(string plainText)
{
byte[] cipherbytes;
//establish crypto stream
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(
ms,
sa.CreateEncryptor(),
CryptoStreamMode.Write);
//write plaintext bytes to crypto stream
byte[] plainbytes =
Encoding.Unicode.GetBytes(plainText);
cs.Write(plainbytes, 0, plainbytes.Length);
cs.Close();
cipherbytes = ms.ToArray();
ms.Close();
//display ciphertext byte array in hex format
return Encoding.Uniecode.GetString(cipherbytes);
}
private string DeCipher(string cipherText)
{
byte[] cipherbytes;
cipherbytes=Encoding.Uniecode.GetBytes(cipherText) ;
//establish crypto stream
MemoryStream ms = new MemoryStream(cipherbytes);
CryptoStream cs = new CryptoStream(
ms,
sa.CreateDecryptor(),
CryptoStreamMode.Read);
//read plaintext bytes from crypto stream
byte[] plainbytes =
new byte[cipherbytes.Length];
cs.Read(plainbytes, 0, cipherbytes.Length);
cs.Close();
ms.Close();
//display recovered plaintext
return Encoding.Uniecode.GetString(plainbytes);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(0, 16);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(744, 20);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "";
this.textBox1.TextChanged += new
System.EventHandler(this.textBox1_TextChanged);
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(0, 56);
this.textBox2.Name = "textBox2";
this.textBox2.ReadOnly = true;
this.textBox2.Size = new System.Drawing.Size(744, 20);
this.textBox2.TabIndex = 1;
this.textBox2.Text = "";
//
// textBox3
//
this.textBox3.Location = new System.Drawing.Point(0, 96);
this.textBox3.Name = "textBox3";
this.textBox3.ReadOnly = true;
this.textBox3.Size = new System.Drawing.Size(744, 20);
this.textBox3.TabIndex = 2;
this.textBox3.Text = "";
//
// label1
//
this.label1.Location = new System.Drawing.Point(0, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(136, 16);
this.label1.TabIndex = 3;
this.label1.Text = "Tu pisz";
//
// label2
//
this.label2.Location = new System.Drawing.Point(0, 40);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(100, 16);
this.label2.TabIndex = 4;
this.label2.Text = "Text zaszyfrowany";
//
// label3
//
this.label3.Location = new System.Drawing.Point(0, 80);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(112, 16);
this.label3.TabIndex = 5;
this.label3.Text = "Tekst odszyfrowany";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(744, 126);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.textBox3);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
textBox2.Text=Cipher(textBox1.Text);
textBox3.Text=DeCipher(textBox2.Text);
//System.IO.StreamWriter sw=new StreamWriter("text.txt", true,
System.Text.Encoding.Unicode);
//sw.WriteLine(textBox2.Text);
//sw.WriteLine(textBox3.Text);
//sw.Close();
}
}
}
--
"Zeglarstwo jest koniecznoscia
zycie nia nie jest"
www.saper.infra.pl/
Saper(ek)