OnePass/OnePass/Form1.cs

329 lines
12 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Forms;
namespace OnePass
{
public partial class Form1 : Form
{
private Form2 form2 = new Form2();
public Form1()
{
Directory.CreateDirectory(form2.path);
InitializeComponent();
}
string vowels = "aaaaaeeeeeeeiiiiiooooouuu";
string consonants = "bbcccdddfffgghhhhjklllmmmnnnnnpprrrrrsssssttttttvwwxyyz";
string[] vowelafter = { "th", "ch", "sh", "qu" };
string[] consonantafter = { "oo", "ee" };
public string GeneratePassword(int length, int seed)
{
Random rnd = new Random(seed);
string pass = "";
bool isvowel = false;
for (int i = 0; i < length; i++)
{
if (isvowel)
{
if (rnd.Next(0, 5) == 0 && i < (length - 1))
{
pass += consonantafter[rnd.Next(0, consonantafter.Length)];
}
else
{
pass += vowels.Substring(rnd.Next(0, vowels.Length), 1);
}
}
else
{
if (rnd.Next(0, 5) == 0 && i < (length - 1))
{
pass += vowelafter[rnd.Next(0, vowelafter.Length)];
}
else
{
pass += consonants.Substring(rnd.Next(0, consonants.Length), 1);
}
}
isvowel = !isvowel;
}
return pass;
}//using Microsoft.WindowsAPICodePack.Dialogs;
private void label7_Click(object sender, EventArgs e)
{
label7.BackColor = System.Drawing.SystemColors.Highlight;
atoz.BackColor = System.Drawing.SystemColors.InactiveCaption;
uAtoZ.BackColor = System.Drawing.SystemColors.InactiveCaption;
numbers.BackColor = System.Drawing.SystemColors.InactiveCaption;
special.BackColor = System.Drawing.SystemColors.InactiveCaption;
extspc.BackColor = System.Drawing.SystemColors.InactiveCaption;
}
private void atoz_Click(object sender, EventArgs e)
{
label7.BackColor = System.Drawing.SystemColors.InactiveCaption;
if (atoz.BackColor == System.Drawing.SystemColors.InactiveCaption)
{
atoz.BackColor = System.Drawing.SystemColors.Highlight;
} else
{
atoz.BackColor = System.Drawing.SystemColors.InactiveCaption;
}
}
private void uAtoZ_Click(object sender, EventArgs e)
{
label7.BackColor = System.Drawing.SystemColors.InactiveCaption;
if (uAtoZ.BackColor == System.Drawing.SystemColors.InactiveCaption)
{
uAtoZ.BackColor = System.Drawing.SystemColors.Highlight;
}
else
{
uAtoZ.BackColor = System.Drawing.SystemColors.InactiveCaption;
}
}
private void numbers_Click(object sender, EventArgs e)
{
label7.BackColor = System.Drawing.SystemColors.InactiveCaption;
if (numbers.BackColor == System.Drawing.SystemColors.InactiveCaption)
{
numbers.BackColor = System.Drawing.SystemColors.Highlight;
}
else
{
numbers.BackColor = System.Drawing.SystemColors.InactiveCaption;
}
}
private void special_Click(object sender, EventArgs e)
{
label7.BackColor = System.Drawing.SystemColors.InactiveCaption;
if (special.BackColor == System.Drawing.SystemColors.InactiveCaption)
{
special.BackColor = System.Drawing.SystemColors.Highlight;
}
else
{
special.BackColor = System.Drawing.SystemColors.InactiveCaption;
}
}
void addSpecial(ref ArrayList list)
{
foreach (int c in new int[] { 33, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 64 })
{
list.Add(Char.ConvertFromUtf32(c));
}
}
void addExtended(ref ArrayList list)
{
for (int i = 56; i <= 63; i++)
{
list.Add(Char.ConvertFromUtf32(i));
}
for (int i = 91; i <= 96; i++)
{
list.Add(Char.ConvertFromUtf32(i));
}
for (int i = 123; i <= 126; i++)
{
list.Add(Char.ConvertFromUtf32(i));
}
}
void addNumbers(ref ArrayList list)
{
for(int i = 48; i <= 57; i++)
{
list.Add(Char.ConvertFromUtf32(i));
}
}
void addLower(ref ArrayList list)
{
for (int i = 97; i <= 122; i++)
{
list.Add(Char.ConvertFromUtf32(i));
}
}
void addUpper(ref ArrayList list)
{
for (int i = 65; i <= 90; i++)
{
list.Add(Char.ConvertFromUtf32(i));
}
}
public string GenerateKey(uint length, ulong seed, ref ArrayList list)
{
int to = list.Count;
Random r = new Random((int)seed + (int)length);
StringBuilder qs = new StringBuilder();
for (int i = 0; i < length; i++)
{
qs.Append(list[r.Next(0,to)]);
}
return qs.ToString();
}
private void Generate_Click(object sender, EventArgs e)
{
if (sitename.Text == "" || username.Text == "" || masterpass.Text == "")
{
System.Windows.MessageBox.Show("Cannot leave a field blank!");
return;
}
ArrayList chars = new ArrayList();
if (special.BackColor == System.Drawing.SystemColors.Highlight)
addSpecial(ref chars);
if (numbers.BackColor == System.Drawing.SystemColors.Highlight)
addNumbers(ref chars);
if (atoz.BackColor == System.Drawing.SystemColors.Highlight)
addLower(ref chars);
if (uAtoZ.BackColor == System.Drawing.SystemColors.Highlight)
addUpper(ref chars);
if (extspc.BackColor == System.Drawing.SystemColors.Highlight)
addExtended(ref chars);
if(label7.BackColor == System.Drawing.SystemColors.Highlight)
{
chars.Add('A');
}
if (chars.Count == 0)
{
System.Windows.MessageBox.Show("Must have at least one option turned on to generate a password!");
return;
}
byte[] sn_bytes = Encoding.ASCII.GetBytes(sitename.Text);
byte[] un_bytes = Encoding.ASCII.GetBytes(username.Text);
byte[] mp_bytes = Encoding.ASCII.GetBytes(masterpass.Text);
ulong seed = (ulong)passCycle.Value * 0x13AFF5b8;
byte c = 0;
uint temp=0;
foreach(byte b in sn_bytes)
{
temp = b;
seed^= (temp << (c++%16)*4);
}
foreach (byte b in un_bytes)
{
seed += b;
}
foreach (byte b in mp_bytes)
{
temp = b;
seed ^= (temp << (c++ % 8) * 8);
}
try
{
if (label7.BackColor == System.Drawing.SystemColors.Highlight)
System.Windows.Clipboard.SetText(GeneratePassword((int)passLength.Value, (int)seed));
else
System.Windows.Clipboard.SetText(GenerateKey((uint)passLength.Value, seed, ref chars));
} catch
{
System.Windows.MessageBox.Show("Attempt to capture clipboard data over the network! (Are you using remote desktop w/clipboard)");
}
masterpass.Text = "";
}
private void extspc_Click(object sender, EventArgs e)
{
label7.BackColor = System.Drawing.SystemColors.InactiveCaption;
if (extspc.BackColor == System.Drawing.SystemColors.InactiveCaption)
{
extspc.BackColor = System.Drawing.SystemColors.Highlight;
}
else
{
extspc.BackColor = System.Drawing.SystemColors.InactiveCaption;
}
}
private void help_Click(object sender, EventArgs e)
{
System.Windows.MessageBox.Show("When a password is generated the password will live on your clipboard for 7 seconds (paste it quick). Then your master password and the clipboard is also cleared out! Make sure nothing important is on the clipboard!","Help!");
}
private string MakeValidFileName(string name)
{
string invalidChars = System.Text.RegularExpressions.Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars()));
string invalidRegStr = string.Format(@"([{0}]*\.+$)|([{0}]+)", invalidChars);
return form2.path + "\\" + System.Text.RegularExpressions.Regex.Replace(name, invalidRegStr, "_");
}
private void load_login_Click(object sender, EventArgs e)
{
form2.init();
this.Enabled = false;
form2.ShowDialog(this);
this.Enabled = true;
if (form2.state == true)
{
sitename.Text = form2.site;
username.Text = form2.login;
passCycle.Value = (decimal)form2.cycle;
passLength.Value = (decimal)form2.length;
special.BackColor = (form2.opt1) ? System.Drawing.SystemColors.Highlight : System.Drawing.SystemColors.InactiveCaption;
numbers.BackColor = (form2.opt2) ? System.Drawing.SystemColors.Highlight : System.Drawing.SystemColors.InactiveCaption;
atoz.BackColor = (form2.opt3) ? System.Drawing.SystemColors.Highlight : System.Drawing.SystemColors.InactiveCaption;
uAtoZ.BackColor = (form2.opt4) ? System.Drawing.SystemColors.Highlight : System.Drawing.SystemColors.InactiveCaption;
extspc.BackColor = (form2.opt5) ? System.Drawing.SystemColors.Highlight : System.Drawing.SystemColors.InactiveCaption;
label7.BackColor = (form2.opt6) ? System.Drawing.SystemColors.Highlight : System.Drawing.SystemColors.InactiveCaption;
}
}
private void save_login_Click(object sender, EventArgs e)
{
if(sitename.Text=="" || username.Text == "")
{
System.Windows.MessageBox.Show("Cannot save data if fields are incomplete!");
return;
}
try
{
BinaryWriter writer = new BinaryWriter(File.Open(MakeValidFileName(sitename.Text + username.Text), FileMode.Create));
writer.Write(sitename.Text);
writer.Write(username.Text);
writer.Write((int)passCycle.Value);
writer.Write((int)passLength.Value);
writer.Write(special.BackColor == System.Drawing.SystemColors.Highlight);
writer.Write(numbers.BackColor == System.Drawing.SystemColors.Highlight);
writer.Write(atoz.BackColor == System.Drawing.SystemColors.Highlight);
writer.Write(uAtoZ.BackColor == System.Drawing.SystemColors.Highlight);
writer.Write(extspc.BackColor == System.Drawing.SystemColors.Highlight);
writer.Write(label7.BackColor == System.Drawing.SystemColors.Highlight);
writer.Flush();
writer.Dispose();
}
catch(Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
}
private void label8_Click(object sender, EventArgs e)
{
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
masterpass.UseSystemPasswordChar = !checkBox1.Checked;
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}