using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.IO;
using System.Threading;
namespace BENcrypt
{
public partial class Form1 : Form
{
public string charArray;
public long KeyInt;
public string input;
public string output;
XMLclass XmlClass;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
setCharArray();
XmlClass = new XMLclass();
XmlClass.XMLpath = Environment.SpecialFolder.ApplicationData + "\\BENcrypt\\config.xml";
if (File.Exists(XmlClass.XMLpath))
{
string[] config = XmlClass.ConfigData;
//input, ouput, key, log
txtIn.Text = config[0];
txtOut.Text = config[1];
txtKey.Text = config[2];
txtLog.Text = config[3];
}
}
private void btnEn_Click(object sender, EventArgs e)
{
log("-------------------------\r\nEncryption event started");
while (true)
{
if (txtKey.Text.Length == 0)
{
log("Error: Key cannot be empty");
break;
}
else if (txtIn.Text.Length == 0)
{
log("Error: Input cannot be empty");
break;
}
string result = encrypt(txtIn.Text, txtKey.Text);
log("Encryption finished.");
txtOut.Text = result;
break;
}
}
private void btnDe_Click(object sender, EventArgs e)
{
while (true)
{
//string pattern = "/^[(0-9]+[:.]+$/";
//string str = txtIn.Text;
/*if (!Regex.Match(str, pattern).Success)
{
log("-------------------------\r\nCannot decrypt - Unrecognized format\r\nMust be like:\r\nxx:xxx:x:xxxxx:xxx\r\ne.t.c.");
break;
}*/
log("-------------------------\r\nDecryption event started");
while (true)
{
if (txtKey.Text.Length == 0)
{
log("Error: Key cannot be empty");
break;
}
else if (txtIn.Text.Length == 0)
{
log("Error: Input cannot be empty");
break;
}
string result = decrypt(txtIn.Text, txtKey.Text);
txtOut.Text = result;
break;
}
break;
}
}
private long generateKey(string x)
{
log("Generating numeric key (" + x + ")");
int[] y = new int[x.Length];
string z = "";
for (int i = 0; i < x.Length; i++)
{
int bz = z.Length;
y[i] = charArray.IndexOf(x[i]);
z += y[i].ToString();
}
long kfinal = 0;
try
{
kfinal = Convert.ToInt32(z) / z.Length / z.Length;
}
catch (Exception ex)
{
kfinal = 0;
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
log("Key generated");
return kfinal;
}
private void setCharArray()
{
charArray = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 !\"£$%^&*()_-+=[]{};:'@#~,<.>/?`¬|\\/";
}
private string decrypt(string str, string key)
{
log("Starting Decryption process...");
KeyInt = generateKey(key);
string output = "";
if (str[str.Length - 1] != ':')
{
str = str + ':'.ToString();
}
// Get number sections, range of numbers before ':'
int erl = 0;
while (true)
{
string[] secRange = new string[str.Length];
int seci = 0;
for (int i = 0; i < str.Length; i++)
{
if (str[i] != ':')
{
secRange[seci] += str[i];
}
else
{
seci++;
}
}
char[] dchars = new char[str.Length];
for (int i = 0; i < seci; i++)
{
int sr = 0;
try
{
sr = Convert.ToInt32(secRange[i]);
}
catch
{
log("Could not decrypt string");
erl++;
break;
}
int conv = 0;
try
{
conv = sr / Convert.ToInt32(KeyInt);
}
catch
{
log("Could not decrypt string");
erl++;
break;
}
try
{
output += charArray[conv];
}
catch
{
log("Could not decrypt string");
erl++;
break;
}
log("'" + sr.ToString() + "' => '" + charArray[conv] + "'");
}
if(erl==0)
log("Decrypted");
break;
}
return output;
}
private string encrypt(string str, string key)
{
log("Starting Encryption process...");
KeyInt = generateKey(key);
string output = "";
while (true)
{
if (str.Contains("\r\n"))
{
str = str.Replace(Environment.NewLine,"");
}
for (int i = 0; i < str.Length; i++)
{
int bl = output.Length;
output += (charArray.IndexOf(str[i]) * KeyInt).ToString() + ":";
log("'" + str[i] + "' => '" + (charArray.IndexOf(str[i]) * KeyInt).ToString() + "'");
}
break;
}
return output.TrimEnd(':');
}
private void log(string str)
{
txtLog.AppendText(str + "\r\n");
}
private void linkClear_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
txtLog.Clear();
}
private void linkSave_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (txtLog.Text.Length > 0)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.DefaultExt = "txt";
sfd.Filter = "Text File (*.txt)|*.txt";
sfd.ShowDialog();
if (sfd.FileName.Length > 0)
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName);
sw.Write(txtLog.Text);
sw.Close();
}
}
}
private void linkPaste_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (Clipboard.ContainsText())
{
txtIn.Text = Clipboard.GetText();
log("Pasted text");
if (Clipboard.GetText().Contains(Environment.NewLine))
{
log("Note: Line breaks will be removed");
}
}
else
{
log("Clipboard data empty or not in text format");
}
}
private void linkCopy_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (txtOut.Text.Length > 0)
{
Clipboard.SetText(txtOut.Text);
log("Copied text");
}
else
{
log("Nothing to copy");
}
}
private void linkClearIn_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
txtIn.Clear();
}
private void linkClearOut_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
txtOut.Clear();
}
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
string a = txtIn.Text;
string b = txtOut.Text;
txtIn.Text = b;
txtOut.Text = a;
}
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
//New
foreach(Control c in this.Controls)
{
if (c is TextBox)
{
((TextBox)c).Clear();
}
}
}
private void loadLogToolStripMenuItem_Click(object sender, EventArgs e)
{
txtLog.Text = loadFile();
}
private void loadOutput_Click(object sender, EventArgs e)
{
txtOut.Text = loadFile();
}
private string loadFile()
{
string result_str = String.Empty;
OpenFileDialog x = new OpenFileDialog();
StreamReader y;
while (true)
{
x.ShowDialog();
if (x.FileName.Length == 0)
break;
else
y = new StreamReader(x.FileName);
if (File.Exists(x.FileName))
result_str = y.ReadToEnd();
else
MessageBox.Show("Error loading file. File doesn't exist!", "Error");
y.Close();
break;
}
return result_str;
}
private bool saveFile(string x)
{
SaveFileDialog y = new SaveFileDialog();
y.DefaultExt = "Text file (*.txt)|*.txt|Any file type (*.*)|*.*";
StreamWriter w;
while (true)
{
y.ShowDialog();
if (y.FileName.Length != 0)
{
try
{
w = new StreamWriter(y.FileName);
w.Write(x);
w.Close();
}
catch
{
return false;
}
return true;
}
else
{
return true;
}
}
}
private void saveLogToolStripMenuItem_Click(object sender, EventArgs e)
{
bool save = saveFile(txtLog.Text);
if (!save)
MessageBox.Show("Error saving file", "Error");
else
MessageBox.Show("Saved successfully", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void saveOut_Click(object sender, EventArgs e)
{
bool save = saveFile(txtOut.Text);
if (!save)
MessageBox.Show("Error saving file", "Error");
else
MessageBox.Show("Saved successfully", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void exitToolStrip_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void openHelpToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
XmlClass.saveConfig(txtIn.Text, txtOut.Text, txtKey.Text, txtLog.Text);
}
}
}
Comments