From c1c0e03f8d2da72a1138217e6dfe4b12867e3ed7 Mon Sep 17 00:00:00 2001 From: Jason Short Date: Wed, 20 May 2020 09:42:30 -0700 Subject: [PATCH 01/14] Cleanup Fixed the dialog naming issue Added an About dialog (HTML launch would not work) Added a copy to clipboard upon generation and a manual button --- StrongPassGenerator/About.Designer.cs | 79 ++++ StrongPassGenerator/About.cs | 25 ++ StrongPassGenerator/About.resx | 138 +++++++ StrongPassGenerator/Form1.Designer.cs | 311 ---------------- StrongPassGenerator/Form1.cs | 35 -- .../GeneratePasswordForm.Designer.cs | 347 ++++++++++++++++++ StrongPassGenerator/GeneratePasswordForm.cs | 44 +++ .../{Form1.resx => GeneratePasswordForm.resx} | 0 StrongPassGenerator/Program.cs | 2 +- .../StrongPassGenerator.csproj | 19 +- 10 files changed, 648 insertions(+), 352 deletions(-) create mode 100644 StrongPassGenerator/About.Designer.cs create mode 100644 StrongPassGenerator/About.cs create mode 100644 StrongPassGenerator/About.resx delete mode 100644 StrongPassGenerator/Form1.Designer.cs delete mode 100644 StrongPassGenerator/Form1.cs create mode 100644 StrongPassGenerator/GeneratePasswordForm.Designer.cs create mode 100644 StrongPassGenerator/GeneratePasswordForm.cs rename StrongPassGenerator/{Form1.resx => GeneratePasswordForm.resx} (100%) diff --git a/StrongPassGenerator/About.Designer.cs b/StrongPassGenerator/About.Designer.cs new file mode 100644 index 0000000..5801eb8 --- /dev/null +++ b/StrongPassGenerator/About.Designer.cs @@ -0,0 +1,79 @@ +namespace StrongPassGenerator +{ + partial class About + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About)); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.Location = new System.Drawing.Point(21, 22); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(650, 383); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = resources.GetString("richTextBox1.Text"); + // + // button1 + // + this.button1.BackColor = System.Drawing.Color.Black; + this.button1.ForeColor = System.Drawing.Color.White; + this.button1.Location = new System.Drawing.Point(21, 425); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(650, 59); + this.button1.TabIndex = 1; + this.button1.Text = "Ok"; + this.button1.UseVisualStyleBackColor = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // About + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.ClientSize = new System.Drawing.Size(693, 504); + this.Controls.Add(this.button1); + this.Controls.Add(this.richTextBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.Name = "About"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Strong Password Definition / Requirements"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/StrongPassGenerator/About.cs b/StrongPassGenerator/About.cs new file mode 100644 index 0000000..ace81be --- /dev/null +++ b/StrongPassGenerator/About.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace StrongPassGenerator +{ + public partial class About : Form + { + public About() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/StrongPassGenerator/About.resx b/StrongPassGenerator/About.resx new file mode 100644 index 0000000..4599bfe --- /dev/null +++ b/StrongPassGenerator/About.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + A strong password has: + + at least 15 characters + uppercase letters + lowercase letters + numbers + symbols, such as ` ! " ? $ ? % ^ & * ( ) _ - + = { [ } ] : ; @ ' ~ # | \ < , > . ? + +A strong password is not: + + your username + your name, your friend’s name, your family member’s name, or a common name + your date of birth + a dictionary word + like your previous passwords + a keyboard pattern, such as qwerty, asdfghjkl, or 12345678 + + \ No newline at end of file diff --git a/StrongPassGenerator/Form1.Designer.cs b/StrongPassGenerator/Form1.Designer.cs deleted file mode 100644 index 0dc314f..0000000 --- a/StrongPassGenerator/Form1.Designer.cs +++ /dev/null @@ -1,311 +0,0 @@ -namespace StrongPassGenerator -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.button1 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); - this.checkBox4 = new System.Windows.Forms.CheckBox(); - this.checkBox5 = new System.Windows.Forms.CheckBox(); - this.checkBox6 = new System.Windows.Forms.CheckBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.readHereToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.menuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // button1 - // - this.button1.BackColor = System.Drawing.SystemColors.InactiveCaptionText; - this.button1.Font = new System.Drawing.Font("Roundest-Light", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.button1.ForeColor = System.Drawing.SystemColors.ControlLightLight; - this.button1.Location = new System.Drawing.Point(182, 270); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(97, 30); - this.button1.TabIndex = 0; - this.button1.Text = "Generate"; - this.button1.UseVisualStyleBackColor = false; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.Location = new System.Drawing.Point(24, 48); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(123, 19); - this.label1.TabIndex = 1; - this.label1.Text = "Password Length:"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.Location = new System.Drawing.Point(24, 78); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(117, 19); - this.label2.TabIndex = 2; - this.label2.Text = "Include Symbols:"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label3.Location = new System.Drawing.Point(24, 103); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(122, 19); - this.label3.TabIndex = 3; - this.label3.Text = "Include Numbers:"; - // - // textBox1 - // - this.textBox1.BackColor = System.Drawing.SystemColors.MenuText; - this.textBox1.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox1.ForeColor = System.Drawing.SystemColors.Window; - this.textBox1.Location = new System.Drawing.Point(244, 48); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(43, 27); - this.textBox1.TabIndex = 5; - this.textBox1.Text = "15"; - this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.Location = new System.Drawing.Point(24, 131); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(207, 19); - this.label4.TabIndex = 6; - this.label4.Text = "Include Lowercase Characters:"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label5.Location = new System.Drawing.Point(24, 158); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(207, 19); - this.label5.TabIndex = 7; - this.label5.Text = "Include Uppercase Characters:"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label6.Location = new System.Drawing.Point(24, 190); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(185, 19); - this.label6.TabIndex = 8; - this.label6.Text = "Exclude Similar Characters:"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label7.Location = new System.Drawing.Point(25, 218); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(213, 19); - this.label7.TabIndex = 9; - this.label7.Text = "Exclude Ambiguous Characters:"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Checked = true; - this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox1.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBox1.Location = new System.Drawing.Point(244, 77); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(115, 23); - this.checkBox1.TabIndex = 10; - this.checkBox1.Text = "( e.g. @#$% )"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Checked = true; - this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox2.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBox2.Location = new System.Drawing.Point(244, 104); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(122, 23); - this.checkBox2.TabIndex = 11; - this.checkBox2.Text = "( e.g. 123456 )"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // checkBox3 - // - this.checkBox3.AutoSize = true; - this.checkBox3.Checked = true; - this.checkBox3.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox3.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBox3.Location = new System.Drawing.Point(244, 130); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Size = new System.Drawing.Size(134, 23); - this.checkBox3.TabIndex = 12; - this.checkBox3.Text = "( e.g. abcdefgh )"; - this.checkBox3.UseVisualStyleBackColor = true; - // - // checkBox4 - // - this.checkBox4.AutoSize = true; - this.checkBox4.Checked = true; - this.checkBox4.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox4.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBox4.Location = new System.Drawing.Point(244, 159); - this.checkBox4.Name = "checkBox4"; - this.checkBox4.Size = new System.Drawing.Size(146, 23); - this.checkBox4.TabIndex = 13; - this.checkBox4.Text = "( e.g. ABCDEFGH )"; - this.checkBox4.UseVisualStyleBackColor = true; - // - // checkBox5 - // - this.checkBox5.AutoSize = true; - this.checkBox5.Checked = true; - this.checkBox5.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox5.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBox5.Location = new System.Drawing.Point(244, 190); - this.checkBox5.Name = "checkBox5"; - this.checkBox5.Size = new System.Drawing.Size(176, 23); - this.checkBox5.TabIndex = 14; - this.checkBox5.Text = "( e.g. |, l, 1, I, o, 0, O )"; - this.checkBox5.UseVisualStyleBackColor = true; - // - // checkBox6 - // - this.checkBox6.AutoSize = true; - this.checkBox6.Checked = true; - this.checkBox6.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox6.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.checkBox6.Location = new System.Drawing.Point(244, 219); - this.checkBox6.Name = "checkBox6"; - this.checkBox6.Size = new System.Drawing.Size(211, 23); - this.checkBox6.TabIndex = 15; - this.checkBox6.Text = "( { } [ ] ( ) / \\ \' \" ` ~ , ; : . < > )"; - this.checkBox6.UseVisualStyleBackColor = true; - // - // textBox2 - // - this.textBox2.BackColor = System.Drawing.SystemColors.MenuText; - this.textBox2.Font = new System.Drawing.Font("Calibri", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.textBox2.ForeColor = System.Drawing.SystemColors.Window; - this.textBox2.Location = new System.Drawing.Point(54, 311); - this.textBox2.Name = "textBox2"; - this.textBox2.ReadOnly = true; - this.textBox2.Size = new System.Drawing.Size(351, 33); - this.textBox2.TabIndex = 16; - this.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - // - // menuStrip1 - // - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.readHereToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(475, 24); - this.menuStrip1.TabIndex = 17; - this.menuStrip1.Text = "menuStrip1"; - // - // readHereToolStripMenuItem - // - this.readHereToolStripMenuItem.Name = "readHereToolStripMenuItem"; - this.readHereToolStripMenuItem.Size = new System.Drawing.Size(70, 20); - this.readHereToolStripMenuItem.Text = "ReadHere"; - this.readHereToolStripMenuItem.Click += new System.EventHandler(this.readHereToolStripMenuItem_Click); - // - // Form1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.ClientSize = new System.Drawing.Size(475, 375); - this.Controls.Add(this.textBox2); - this.Controls.Add(this.checkBox6); - this.Controls.Add(this.checkBox5); - this.Controls.Add(this.checkBox4); - this.Controls.Add(this.checkBox3); - this.Controls.Add(this.checkBox2); - this.Controls.Add(this.checkBox1); - this.Controls.Add(this.label7); - this.Controls.Add(this.label6); - this.Controls.Add(this.label5); - this.Controls.Add(this.label4); - this.Controls.Add(this.textBox1); - this.Controls.Add(this.label3); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.button1); - this.Controls.Add(this.menuStrip1); - this.ForeColor = System.Drawing.SystemColors.ControlLightLight; - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.Name = "Form1"; - this.Text = "Strong Password Generator"; - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.CheckBox checkBox3; - private System.Windows.Forms.CheckBox checkBox4; - private System.Windows.Forms.CheckBox checkBox5; - private System.Windows.Forms.CheckBox checkBox6; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.MenuStrip menuStrip1; - private System.Windows.Forms.ToolStripMenuItem readHereToolStripMenuItem; - } -} - diff --git a/StrongPassGenerator/Form1.cs b/StrongPassGenerator/Form1.cs deleted file mode 100644 index 39a6848..0000000 --- a/StrongPassGenerator/Form1.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace StrongPassGenerator -{ - public partial class Form1 : Form - { - Password password = new Password(); - public Form1() - { - InitializeComponent(); - } - - private void readHereToolStripMenuItem_Click(object sender, EventArgs e) - { - string targetURL = @"c:\users\administrator\documents\visual studio 2015\Projects\StrongPassGenerator\StrongPassGenerator\HTMLPage1.html"; - System.Diagnostics.Process.Start(targetURL); - } - - private void button1_Click(object sender, EventArgs e) - { - textBox2.Text = ""; - textBox2.Text = password.Generate(int.Parse(textBox1.Text),checkBox1.Checked,checkBox2.Checked,checkBox3.Checked,checkBox4.Checked,checkBox5.Checked,checkBox6.Checked); - - } - } -} diff --git a/StrongPassGenerator/GeneratePasswordForm.Designer.cs b/StrongPassGenerator/GeneratePasswordForm.Designer.cs new file mode 100644 index 0000000..728247b --- /dev/null +++ b/StrongPassGenerator/GeneratePasswordForm.Designer.cs @@ -0,0 +1,347 @@ +namespace StrongPassGenerator +{ + partial class GeneratePasswordForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.GenerateButton = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.cbIncludeSymbols = new System.Windows.Forms.CheckBox(); + this.cbIncludeNumbers = new System.Windows.Forms.CheckBox(); + this.cbIncludeLowercase = new System.Windows.Forms.CheckBox(); + this.cbIncludeUppercase = new System.Windows.Forms.CheckBox(); + this.cbExcludeSimilarChars = new System.Windows.Forms.CheckBox(); + this.cbExcludeAmbiguous = new System.Windows.Forms.CheckBox(); + this.generatedPassword = new System.Windows.Forms.TextBox(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.readHereToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CopyButton = new System.Windows.Forms.Button(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // GenerateButton + // + this.GenerateButton.BackColor = System.Drawing.SystemColors.InactiveCaptionText; + this.GenerateButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.GenerateButton.ForeColor = System.Drawing.SystemColors.ControlLightLight; + this.GenerateButton.Location = new System.Drawing.Point(273, 415); + this.GenerateButton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.GenerateButton.Name = "GenerateButton"; + this.GenerateButton.Size = new System.Drawing.Size(146, 46); + this.GenerateButton.TabIndex = 0; + this.GenerateButton.Text = "Generate"; + this.GenerateButton.UseVisualStyleBackColor = false; + this.GenerateButton.Click += new System.EventHandler(this.button1_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(36, 74); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(183, 29); + this.label1.TabIndex = 1; + this.label1.Text = "Password Length:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(36, 120); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(179, 29); + this.label2.TabIndex = 2; + this.label2.Text = "Include Symbols:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label3.Location = new System.Drawing.Point(36, 158); + this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(187, 29); + this.label3.TabIndex = 3; + this.label3.Text = "Include Numbers:"; + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.SystemColors.MenuText; + this.textBox1.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox1.ForeColor = System.Drawing.SystemColors.Window; + this.textBox1.Location = new System.Drawing.Point(366, 74); + this.textBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(62, 37); + this.textBox1.TabIndex = 5; + this.textBox1.Text = "15"; + this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label4.Location = new System.Drawing.Point(36, 202); + this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(310, 29); + this.label4.TabIndex = 6; + this.label4.Text = "Include Lowercase Characters:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label5.Location = new System.Drawing.Point(36, 243); + this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(311, 29); + this.label5.TabIndex = 7; + this.label5.Text = "Include Uppercase Characters:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label6.Location = new System.Drawing.Point(36, 292); + this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(277, 29); + this.label6.TabIndex = 8; + this.label6.Text = "Exclude Similar Characters:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label7.Location = new System.Drawing.Point(38, 335); + this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(320, 29); + this.label7.TabIndex = 9; + this.label7.Text = "Exclude Ambiguous Characters:"; + // + // cbIncludeSymbols + // + this.cbIncludeSymbols.AutoSize = true; + this.cbIncludeSymbols.Checked = true; + this.cbIncludeSymbols.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbIncludeSymbols.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbIncludeSymbols.Location = new System.Drawing.Point(366, 118); + this.cbIncludeSymbols.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cbIncludeSymbols.Name = "cbIncludeSymbols"; + this.cbIncludeSymbols.Size = new System.Drawing.Size(165, 33); + this.cbIncludeSymbols.TabIndex = 10; + this.cbIncludeSymbols.Text = "( e.g. @#$% )"; + this.cbIncludeSymbols.UseVisualStyleBackColor = true; + // + // cbIncludeNumbers + // + this.cbIncludeNumbers.AutoSize = true; + this.cbIncludeNumbers.Checked = true; + this.cbIncludeNumbers.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbIncludeNumbers.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbIncludeNumbers.Location = new System.Drawing.Point(366, 160); + this.cbIncludeNumbers.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cbIncludeNumbers.Name = "cbIncludeNumbers"; + this.cbIncludeNumbers.Size = new System.Drawing.Size(175, 33); + this.cbIncludeNumbers.TabIndex = 11; + this.cbIncludeNumbers.Text = "( e.g. 123456 )"; + this.cbIncludeNumbers.UseVisualStyleBackColor = true; + // + // cbIncludeLowercase + // + this.cbIncludeLowercase.AutoSize = true; + this.cbIncludeLowercase.Checked = true; + this.cbIncludeLowercase.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbIncludeLowercase.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbIncludeLowercase.Location = new System.Drawing.Point(366, 200); + this.cbIncludeLowercase.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cbIncludeLowercase.Name = "cbIncludeLowercase"; + this.cbIncludeLowercase.Size = new System.Drawing.Size(193, 33); + this.cbIncludeLowercase.TabIndex = 12; + this.cbIncludeLowercase.Text = "( e.g. abcdefgh )"; + this.cbIncludeLowercase.UseVisualStyleBackColor = true; + // + // cbIncludeUppercase + // + this.cbIncludeUppercase.AutoSize = true; + this.cbIncludeUppercase.Checked = true; + this.cbIncludeUppercase.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbIncludeUppercase.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbIncludeUppercase.Location = new System.Drawing.Point(366, 245); + this.cbIncludeUppercase.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cbIncludeUppercase.Name = "cbIncludeUppercase"; + this.cbIncludeUppercase.Size = new System.Drawing.Size(211, 33); + this.cbIncludeUppercase.TabIndex = 13; + this.cbIncludeUppercase.Text = "( e.g. ABCDEFGH )"; + this.cbIncludeUppercase.UseVisualStyleBackColor = true; + // + // cbExcludeSimilarChars + // + this.cbExcludeSimilarChars.AutoSize = true; + this.cbExcludeSimilarChars.Checked = true; + this.cbExcludeSimilarChars.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbExcludeSimilarChars.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbExcludeSimilarChars.Location = new System.Drawing.Point(366, 292); + this.cbExcludeSimilarChars.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cbExcludeSimilarChars.Name = "cbExcludeSimilarChars"; + this.cbExcludeSimilarChars.Size = new System.Drawing.Size(250, 33); + this.cbExcludeSimilarChars.TabIndex = 14; + this.cbExcludeSimilarChars.Text = "( e.g. |, l, 1, I, o, 0, O )"; + this.cbExcludeSimilarChars.UseVisualStyleBackColor = true; + // + // cbExcludeAmbiguous + // + this.cbExcludeAmbiguous.AutoSize = true; + this.cbExcludeAmbiguous.Checked = true; + this.cbExcludeAmbiguous.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbExcludeAmbiguous.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.cbExcludeAmbiguous.Location = new System.Drawing.Point(366, 337); + this.cbExcludeAmbiguous.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cbExcludeAmbiguous.Name = "cbExcludeAmbiguous"; + this.cbExcludeAmbiguous.Size = new System.Drawing.Size(292, 33); + this.cbExcludeAmbiguous.TabIndex = 15; + this.cbExcludeAmbiguous.Text = "( { } [ ] ( ) / \\ \' \" ` ~ , ; : . < > )"; + this.cbExcludeAmbiguous.UseVisualStyleBackColor = true; + // + // generatedPassword + // + this.generatedPassword.BackColor = System.Drawing.SystemColors.MenuText; + this.generatedPassword.Font = new System.Drawing.Font("Calibri", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.generatedPassword.ForeColor = System.Drawing.SystemColors.Window; + this.generatedPassword.Location = new System.Drawing.Point(43, 478); + this.generatedPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.generatedPassword.Name = "generatedPassword"; + this.generatedPassword.ReadOnly = true; + this.generatedPassword.Size = new System.Drawing.Size(524, 46); + this.generatedPassword.TabIndex = 16; + this.generatedPassword.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // menuStrip1 + // + this.menuStrip1.GripMargin = new System.Windows.Forms.Padding(2, 2, 0, 2); + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.readHereToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(712, 33); + this.menuStrip1.TabIndex = 17; + this.menuStrip1.Text = "menuStrip1"; + // + // readHereToolStripMenuItem + // + this.readHereToolStripMenuItem.Name = "readHereToolStripMenuItem"; + this.readHereToolStripMenuItem.Size = new System.Drawing.Size(78, 29); + this.readHereToolStripMenuItem.Text = "About"; + this.readHereToolStripMenuItem.Click += new System.EventHandler(this.readHereToolStripMenuItem_Click); + // + // CopyButton + // + this.CopyButton.BackColor = System.Drawing.SystemColors.InactiveCaptionText; + this.CopyButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.CopyButton.ForeColor = System.Drawing.SystemColors.ControlLightLight; + this.CopyButton.Location = new System.Drawing.Point(575, 478); + this.CopyButton.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.CopyButton.Name = "CopyButton"; + this.CopyButton.Size = new System.Drawing.Size(104, 46); + this.CopyButton.TabIndex = 18; + this.CopyButton.Text = "Copy"; + this.CopyButton.UseVisualStyleBackColor = false; + this.CopyButton.Click += new System.EventHandler(this.button1_Click_1); + // + // GeneratePasswordForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.ClientSize = new System.Drawing.Size(712, 577); + this.Controls.Add(this.CopyButton); + this.Controls.Add(this.generatedPassword); + this.Controls.Add(this.cbExcludeAmbiguous); + this.Controls.Add(this.cbExcludeSimilarChars); + this.Controls.Add(this.cbIncludeUppercase); + this.Controls.Add(this.cbIncludeLowercase); + this.Controls.Add(this.cbIncludeNumbers); + this.Controls.Add(this.cbIncludeSymbols); + this.Controls.Add(this.label7); + this.Controls.Add(this.label6); + this.Controls.Add(this.label5); + this.Controls.Add(this.label4); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.GenerateButton); + this.Controls.Add(this.menuStrip1); + this.ForeColor = System.Drawing.SystemColors.ControlLightLight; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.MaximizeBox = false; + this.Name = "GeneratePasswordForm"; + this.Text = "Strong Password Generator"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button GenerateButton; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.CheckBox cbIncludeSymbols; + private System.Windows.Forms.CheckBox cbIncludeNumbers; + private System.Windows.Forms.CheckBox cbIncludeLowercase; + private System.Windows.Forms.CheckBox cbIncludeUppercase; + private System.Windows.Forms.CheckBox cbExcludeSimilarChars; + private System.Windows.Forms.CheckBox cbExcludeAmbiguous; + private System.Windows.Forms.TextBox generatedPassword; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem readHereToolStripMenuItem; + private System.Windows.Forms.Button CopyButton; + } +} + diff --git a/StrongPassGenerator/GeneratePasswordForm.cs b/StrongPassGenerator/GeneratePasswordForm.cs new file mode 100644 index 0000000..abbb409 --- /dev/null +++ b/StrongPassGenerator/GeneratePasswordForm.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace StrongPassGenerator +{ + public partial class GeneratePasswordForm : Form + { + Password password = new Password(); + public GeneratePasswordForm() + { + InitializeComponent(); + } + + private void readHereToolStripMenuItem_Click(object sender, EventArgs e) + { + var about = new About(); + about.ShowDialog(); + //string targetURL = @"c:\users\administrator\documents\visual studio 2015\Projects\StrongPassGenerator\StrongPassGenerator\HTMLPage1.html"; + //System.Diagnostics.Process.Start(targetURL); + } + + private void button1_Click(object sender, EventArgs e) + { + generatedPassword.Text = string.Empty; + generatedPassword.Text = password.Generate(int.Parse(textBox1.Text),cbIncludeSymbols.Checked,cbIncludeNumbers.Checked,cbIncludeLowercase.Checked,cbIncludeUppercase.Checked,cbExcludeSimilarChars.Checked,cbExcludeAmbiguous.Checked); + // Copy to clipboard to make it easier to use + Clipboard.SetText(generatedPassword.Text); + + } + + private void button1_Click_1(object sender, EventArgs e) + { + Clipboard.SetText(generatedPassword.Text); + } + } +} diff --git a/StrongPassGenerator/Form1.resx b/StrongPassGenerator/GeneratePasswordForm.resx similarity index 100% rename from StrongPassGenerator/Form1.resx rename to StrongPassGenerator/GeneratePasswordForm.resx diff --git a/StrongPassGenerator/Program.cs b/StrongPassGenerator/Program.cs index d64f796..3fd1e4d 100644 --- a/StrongPassGenerator/Program.cs +++ b/StrongPassGenerator/Program.cs @@ -19,7 +19,7 @@ static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Form1()); + Application.Run(new GeneratePasswordForm()); } } } diff --git a/StrongPassGenerator/StrongPassGenerator.csproj b/StrongPassGenerator/StrongPassGenerator.csproj index e1220e0..9e2867b 100644 --- a/StrongPassGenerator/StrongPassGenerator.csproj +++ b/StrongPassGenerator/StrongPassGenerator.csproj @@ -46,17 +46,26 @@ - + Form - - Form1.cs + + About.cs + + + Form + + + GeneratePasswordForm.cs - - Form1.cs + + About.cs + + + GeneratePasswordForm.cs ResXFileCodeGenerator From 5892d93a535077c22bb338e3136b3782a5af5cb6 Mon Sep 17 00:00:00 2001 From: Jason Short Date: Wed, 20 May 2020 09:46:37 -0700 Subject: [PATCH 02/14] Screnshot Screenshot updates --- Images/AppEnv.jpg | Bin 56093 -> 50104 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Images/AppEnv.jpg b/Images/AppEnv.jpg index ff7a81cf8c34f2443e3e22021c88b938ca7be5dd..13b26c74f3b566c689f614c8082b91c6b846a161 100644 GIT binary patch literal 50104 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 VBvvC@H3*NY#lE)I97S&Q{ST76pLPHM literal 56093 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
YU~BN%!n!{mq78c5 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 From 23e9e4833c9c3a71a2f0702505f285485e4b0e8e Mon Sep 17 00:00:00 2001 From: Jason Short Date: Wed, 20 May 2020 09:58:47 -0700 Subject: [PATCH 03/14] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8fc208a..35b147b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ # StrongPasswordGenerator -Strong Password Generator is a Windows Form application that helps creating random unbreakable, unhackable strong passwords +Strong Password Generator is a Windows Forms application that helps creating random strong passwords. + +Choose your options, and press the Generate button. The resulting password is automatically copied to your clipboard for use. + ![ApplicationEnvironment](Images/AppEnv.jpg) From 0a3c19bb099a1b3717fa35c6e91ac1c6aff1aa9a Mon Sep 17 00:00:00 2001 From: Jason Short Date: Wed, 20 May 2020 10:07:13 -0700 Subject: [PATCH 04/14] Seeded random Removed HTML page. Seeded random to ensure uniqueness Going to have to cleanup the goto code blocks. --- StrongPassGenerator/GeneratePasswordForm.cs | 2 -- StrongPassGenerator/HTMLPage1.html | 36 --------------------- StrongPassGenerator/Password.cs | 14 ++++---- 3 files changed, 8 insertions(+), 44 deletions(-) delete mode 100644 StrongPassGenerator/HTMLPage1.html diff --git a/StrongPassGenerator/GeneratePasswordForm.cs b/StrongPassGenerator/GeneratePasswordForm.cs index abbb409..29051f3 100644 --- a/StrongPassGenerator/GeneratePasswordForm.cs +++ b/StrongPassGenerator/GeneratePasswordForm.cs @@ -23,8 +23,6 @@ private void readHereToolStripMenuItem_Click(object sender, EventArgs e) { var about = new About(); about.ShowDialog(); - //string targetURL = @"c:\users\administrator\documents\visual studio 2015\Projects\StrongPassGenerator\StrongPassGenerator\HTMLPage1.html"; - //System.Diagnostics.Process.Start(targetURL); } private void button1_Click(object sender, EventArgs e) diff --git a/StrongPassGenerator/HTMLPage1.html b/StrongPassGenerator/HTMLPage1.html deleted file mode 100644 index fb6ac57..0000000 --- a/StrongPassGenerator/HTMLPage1.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Strong Password Definition / Requirements - - - -

- Strong Password Definition / Requirements -

-

- A strong password has:
-

-

- 1_ at least 15 characters
- 2_ uppercase letters
- 3_ lowercase letters
- 4_ numbers
- 5_ symbols, such as ` ! " ? $ ? % ^ & * ( ) _ - + = { [ } ] : ; @ ' ~ # | \ < , > . ? /


-

- -

- A strong password is not:
-

-

- * your username
- * your name, your friend’s name, your family member’s name, or a common name
- * your date of birth
- * a dictionary word
- * like your previous passwords
- * a keyboard pattern, such as qwerty, asdfghjkl, or 12345678
-

- - \ No newline at end of file diff --git a/StrongPassGenerator/Password.cs b/StrongPassGenerator/Password.cs index ac2f42f..f4e7cfe 100644 --- a/StrongPassGenerator/Password.cs +++ b/StrongPassGenerator/Password.cs @@ -8,7 +8,14 @@ namespace StrongPassGenerator { public class Password { - Random random = new Random(); + Random random; + + public Password() + { + // Always seed a random to ensure unique values! + random = new Random(System.DateTime.Now.Millisecond); + } + public string Generate(int inputLength, bool symbol, bool number, bool lowerCase, bool upperCase, bool noSimilar, bool isAmbigious) { var initialInputLength = inputLength; @@ -92,12 +99,9 @@ public char Symbols() case 2: symbolChar = (char)(random.Next(35, 39)); break; - case 3: symbolChar = (char)(random.Next(42, 44)); break; - - case 4: symbolChar = (char)(random.Next(61, 62)); break; @@ -126,8 +130,6 @@ public char UpperCase() return upperCaseChar; } - - public string removeSimilar(string similar) { char c; From 47008a6d4c83fb2a331ebf66a47d17bc4fd81158 Mon Sep 17 00:00:00 2001 From: Jason Short Date: Wed, 20 May 2020 10:20:55 -0700 Subject: [PATCH 05/14] Update StrongPassGenerator.csproj Remove HTML --- StrongPassGenerator/StrongPassGenerator.csproj | 3 --- 1 file changed, 3 deletions(-) diff --git a/StrongPassGenerator/StrongPassGenerator.csproj b/StrongPassGenerator/StrongPassGenerator.csproj index 9e2867b..084ef65 100644 --- a/StrongPassGenerator/StrongPassGenerator.csproj +++ b/StrongPassGenerator/StrongPassGenerator.csproj @@ -89,9 +89,6 @@ - - - \ No newline at end of file From 5dba6db00be78574fd616992f6f5e3ba63d53a18 Mon Sep 17 00:00:00 2001 From: Jason Short Date: Wed, 6 Dec 2023 14:46:43 -0800 Subject: [PATCH 14/14] Option to force to start with a letter Some sites won't accept a non letter first password --- .../GeneratePasswordForm.Designer.cs | 515 ++++++++++-------- StrongPassGenerator/GeneratePasswordForm.cs | 4 +- StrongPassGenerator/GeneratePasswordForm.resx | 50 +- StrongPassGenerator/Password.cs | 15 +- .../Properties/AssemblyInfo.cs | 4 +- 5 files changed, 324 insertions(+), 264 deletions(-) diff --git a/StrongPassGenerator/GeneratePasswordForm.Designer.cs b/StrongPassGenerator/GeneratePasswordForm.Designer.cs index 806ebec..5a7192b 100644 --- a/StrongPassGenerator/GeneratePasswordForm.Designer.cs +++ b/StrongPassGenerator/GeneratePasswordForm.Designer.cs @@ -29,303 +29,350 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GeneratePasswordForm)); - this.GenerateButton = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.passwordLengthTextBox = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.cbIncludeSymbols = new System.Windows.Forms.CheckBox(); - this.cbIncludeNumbers = new System.Windows.Forms.CheckBox(); - this.cbIncludeLowercase = new System.Windows.Forms.CheckBox(); - this.cbIncludeUppercase = new System.Windows.Forms.CheckBox(); - this.cbExcludeSimilarChars = new System.Windows.Forms.CheckBox(); - this.cbExcludeAmbiguous = new System.Windows.Forms.CheckBox(); - this.generatedPassword = new System.Windows.Forms.TextBox(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.readHereToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.CopyButton = new System.Windows.Forms.Button(); - this.cbExcludeDuplicateChars = new System.Windows.Forms.CheckBox(); - this.label8 = new System.Windows.Forms.Label(); - this.menuStrip1.SuspendLayout(); - this.SuspendLayout(); + GenerateButton = new System.Windows.Forms.Button(); + label1 = new System.Windows.Forms.Label(); + label2 = new System.Windows.Forms.Label(); + label3 = new System.Windows.Forms.Label(); + passwordLengthTextBox = new System.Windows.Forms.TextBox(); + label4 = new System.Windows.Forms.Label(); + label5 = new System.Windows.Forms.Label(); + label6 = new System.Windows.Forms.Label(); + label7 = new System.Windows.Forms.Label(); + cbIncludeSymbols = new System.Windows.Forms.CheckBox(); + cbIncludeNumbers = new System.Windows.Forms.CheckBox(); + cbIncludeLowercase = new System.Windows.Forms.CheckBox(); + cbIncludeUppercase = new System.Windows.Forms.CheckBox(); + cbExcludeSimilarChars = new System.Windows.Forms.CheckBox(); + cbExcludeAmbiguous = new System.Windows.Forms.CheckBox(); + generatedPassword = new System.Windows.Forms.TextBox(); + menuStrip1 = new System.Windows.Forms.MenuStrip(); + readHereToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + CopyButton = new System.Windows.Forms.Button(); + cbExcludeDuplicateChars = new System.Windows.Forms.CheckBox(); + label8 = new System.Windows.Forms.Label(); + cbStartWithLetter = new System.Windows.Forms.CheckBox(); + label9 = new System.Windows.Forms.Label(); + menuStrip1.SuspendLayout(); + SuspendLayout(); // // GenerateButton // - this.GenerateButton.BackColor = System.Drawing.SystemColors.InactiveCaptionText; - this.GenerateButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.GenerateButton.ForeColor = System.Drawing.SystemColors.ControlLightLight; - this.GenerateButton.Location = new System.Drawing.Point(181, 375); - this.GenerateButton.Name = "GenerateButton"; - this.GenerateButton.Size = new System.Drawing.Size(97, 30); - this.GenerateButton.TabIndex = 0; - this.GenerateButton.Text = "Generate"; - this.GenerateButton.UseVisualStyleBackColor = false; - this.GenerateButton.Click += new System.EventHandler(this.button1_Click); + GenerateButton.BackColor = System.Drawing.SystemColors.InactiveCaptionText; + GenerateButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + GenerateButton.ForeColor = System.Drawing.SystemColors.ControlLightLight; + GenerateButton.Location = new System.Drawing.Point(211, 433); + GenerateButton.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + GenerateButton.Name = "GenerateButton"; + GenerateButton.Size = new System.Drawing.Size(113, 35); + GenerateButton.TabIndex = 0; + GenerateButton.Text = "Generate"; + GenerateButton.UseVisualStyleBackColor = false; + GenerateButton.Click += button1_Click; // // label1 // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.Location = new System.Drawing.Point(24, 48); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(123, 19); - this.label1.TabIndex = 1; - this.label1.Text = "Password Length:"; + label1.AutoSize = true; + label1.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label1.Location = new System.Drawing.Point(28, 55); + label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(123, 19); + label1.TabIndex = 1; + label1.Text = "Password Length:"; // // label2 // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label2.Location = new System.Drawing.Point(24, 77); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(117, 19); - this.label2.TabIndex = 2; - this.label2.Text = "Include Symbols:"; + label2.AutoSize = true; + label2.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label2.Location = new System.Drawing.Point(28, 89); + label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(117, 19); + label2.TabIndex = 2; + label2.Text = "Include Symbols:"; // // label3 // - this.label3.AutoSize = true; - this.label3.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label3.Location = new System.Drawing.Point(24, 105); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(122, 19); - this.label3.TabIndex = 3; - this.label3.Text = "Include Numbers:"; + label3.AutoSize = true; + label3.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label3.Location = new System.Drawing.Point(28, 121); + label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new System.Drawing.Size(122, 19); + label3.TabIndex = 3; + label3.Text = "Include Numbers:"; // // passwordLengthTextBox // - this.passwordLengthTextBox.BackColor = System.Drawing.SystemColors.MenuText; - this.passwordLengthTextBox.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.passwordLengthTextBox.ForeColor = System.Drawing.SystemColors.Window; - this.passwordLengthTextBox.Location = new System.Drawing.Point(244, 48); - this.passwordLengthTextBox.Name = "passwordLengthTextBox"; - this.passwordLengthTextBox.Size = new System.Drawing.Size(43, 27); - this.passwordLengthTextBox.TabIndex = 1; - this.passwordLengthTextBox.Text = "16"; - this.passwordLengthTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + passwordLengthTextBox.BackColor = System.Drawing.SystemColors.MenuText; + passwordLengthTextBox.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + passwordLengthTextBox.ForeColor = System.Drawing.SystemColors.Window; + passwordLengthTextBox.Location = new System.Drawing.Point(285, 55); + passwordLengthTextBox.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + passwordLengthTextBox.Name = "passwordLengthTextBox"; + passwordLengthTextBox.Size = new System.Drawing.Size(50, 27); + passwordLengthTextBox.TabIndex = 1; + passwordLengthTextBox.Text = "16"; + passwordLengthTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; // // label4 // - this.label4.AutoSize = true; - this.label4.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label4.Location = new System.Drawing.Point(24, 134); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(207, 19); - this.label4.TabIndex = 6; - this.label4.Text = "Include Lowercase Characters:"; + label4.AutoSize = true; + label4.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label4.Location = new System.Drawing.Point(28, 155); + label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label4.Name = "label4"; + label4.Size = new System.Drawing.Size(207, 19); + label4.TabIndex = 6; + label4.Text = "Include Lowercase Characters:"; // // label5 // - this.label5.AutoSize = true; - this.label5.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label5.Location = new System.Drawing.Point(24, 162); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(207, 19); - this.label5.TabIndex = 7; - this.label5.Text = "Include Uppercase Characters:"; + label5.AutoSize = true; + label5.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label5.Location = new System.Drawing.Point(28, 187); + label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label5.Name = "label5"; + label5.Size = new System.Drawing.Size(207, 19); + label5.TabIndex = 7; + label5.Text = "Include Uppercase Characters:"; // // label6 // - this.label6.AutoSize = true; - this.label6.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label6.Location = new System.Drawing.Point(24, 220); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(206, 19); - this.label6.TabIndex = 8; - this.label6.Text = "Exclude Confusing Characters:"; + label6.AutoSize = true; + label6.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label6.Location = new System.Drawing.Point(28, 254); + label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label6.Name = "label6"; + label6.Size = new System.Drawing.Size(206, 19); + label6.TabIndex = 8; + label6.Text = "Exclude Confusing Characters:"; // // label7 // - this.label7.AutoSize = true; - this.label7.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label7.Location = new System.Drawing.Point(25, 248); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(172, 19); - this.label7.TabIndex = 9; - this.label7.Text = "Exclude Hard Characters:"; + label7.AutoSize = true; + label7.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label7.Location = new System.Drawing.Point(29, 286); + label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label7.Name = "label7"; + label7.Size = new System.Drawing.Size(172, 19); + label7.TabIndex = 9; + label7.Text = "Exclude Hard Characters:"; // // cbIncludeSymbols // - this.cbIncludeSymbols.AutoSize = true; - this.cbIncludeSymbols.Checked = true; - this.cbIncludeSymbols.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbIncludeSymbols.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbIncludeSymbols.Location = new System.Drawing.Point(244, 77); - this.cbIncludeSymbols.Name = "cbIncludeSymbols"; - this.cbIncludeSymbols.Size = new System.Drawing.Size(115, 23); - this.cbIncludeSymbols.TabIndex = 2; - this.cbIncludeSymbols.Text = "( e.g. @#$% )"; - this.cbIncludeSymbols.UseVisualStyleBackColor = true; + cbIncludeSymbols.AutoSize = true; + cbIncludeSymbols.Checked = true; + cbIncludeSymbols.CheckState = System.Windows.Forms.CheckState.Checked; + cbIncludeSymbols.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + cbIncludeSymbols.Location = new System.Drawing.Point(285, 89); + cbIncludeSymbols.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbIncludeSymbols.Name = "cbIncludeSymbols"; + cbIncludeSymbols.Size = new System.Drawing.Size(115, 23); + cbIncludeSymbols.TabIndex = 2; + cbIncludeSymbols.Text = "( e.g. @#$% )"; + cbIncludeSymbols.UseVisualStyleBackColor = true; // // cbIncludeNumbers // - this.cbIncludeNumbers.AutoSize = true; - this.cbIncludeNumbers.Checked = true; - this.cbIncludeNumbers.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbIncludeNumbers.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbIncludeNumbers.Location = new System.Drawing.Point(244, 105); - this.cbIncludeNumbers.Name = "cbIncludeNumbers"; - this.cbIncludeNumbers.Size = new System.Drawing.Size(122, 23); - this.cbIncludeNumbers.TabIndex = 3; - this.cbIncludeNumbers.Text = "( e.g. 123456 )"; - this.cbIncludeNumbers.UseVisualStyleBackColor = true; + cbIncludeNumbers.AutoSize = true; + cbIncludeNumbers.Checked = true; + cbIncludeNumbers.CheckState = System.Windows.Forms.CheckState.Checked; + cbIncludeNumbers.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + cbIncludeNumbers.Location = new System.Drawing.Point(285, 121); + cbIncludeNumbers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbIncludeNumbers.Name = "cbIncludeNumbers"; + cbIncludeNumbers.Size = new System.Drawing.Size(122, 23); + cbIncludeNumbers.TabIndex = 3; + cbIncludeNumbers.Text = "( e.g. 123456 )"; + cbIncludeNumbers.UseVisualStyleBackColor = true; // // cbIncludeLowercase // - this.cbIncludeLowercase.AutoSize = true; - this.cbIncludeLowercase.Checked = true; - this.cbIncludeLowercase.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbIncludeLowercase.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbIncludeLowercase.Location = new System.Drawing.Point(244, 134); - this.cbIncludeLowercase.Name = "cbIncludeLowercase"; - this.cbIncludeLowercase.Size = new System.Drawing.Size(134, 23); - this.cbIncludeLowercase.TabIndex = 4; - this.cbIncludeLowercase.Text = "( e.g. abcdefgh )"; - this.cbIncludeLowercase.UseVisualStyleBackColor = true; + cbIncludeLowercase.AutoSize = true; + cbIncludeLowercase.Checked = true; + cbIncludeLowercase.CheckState = System.Windows.Forms.CheckState.Checked; + cbIncludeLowercase.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + cbIncludeLowercase.Location = new System.Drawing.Point(285, 155); + cbIncludeLowercase.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbIncludeLowercase.Name = "cbIncludeLowercase"; + cbIncludeLowercase.Size = new System.Drawing.Size(134, 23); + cbIncludeLowercase.TabIndex = 4; + cbIncludeLowercase.Text = "( e.g. abcdefgh )"; + cbIncludeLowercase.UseVisualStyleBackColor = true; // // cbIncludeUppercase // - this.cbIncludeUppercase.AutoSize = true; - this.cbIncludeUppercase.Checked = true; - this.cbIncludeUppercase.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbIncludeUppercase.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbIncludeUppercase.Location = new System.Drawing.Point(244, 162); - this.cbIncludeUppercase.Name = "cbIncludeUppercase"; - this.cbIncludeUppercase.Size = new System.Drawing.Size(146, 23); - this.cbIncludeUppercase.TabIndex = 5; - this.cbIncludeUppercase.Text = "( e.g. ABCDEFGH )"; - this.cbIncludeUppercase.UseVisualStyleBackColor = true; + cbIncludeUppercase.AutoSize = true; + cbIncludeUppercase.Checked = true; + cbIncludeUppercase.CheckState = System.Windows.Forms.CheckState.Checked; + cbIncludeUppercase.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + cbIncludeUppercase.Location = new System.Drawing.Point(285, 187); + cbIncludeUppercase.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbIncludeUppercase.Name = "cbIncludeUppercase"; + cbIncludeUppercase.Size = new System.Drawing.Size(146, 23); + cbIncludeUppercase.TabIndex = 5; + cbIncludeUppercase.Text = "( e.g. ABCDEFGH )"; + cbIncludeUppercase.UseVisualStyleBackColor = true; // // cbExcludeSimilarChars // - this.cbExcludeSimilarChars.AutoSize = true; - this.cbExcludeSimilarChars.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbExcludeSimilarChars.Location = new System.Drawing.Point(244, 220); - this.cbExcludeSimilarChars.Name = "cbExcludeSimilarChars"; - this.cbExcludeSimilarChars.Size = new System.Drawing.Size(176, 23); - this.cbExcludeSimilarChars.TabIndex = 7; - this.cbExcludeSimilarChars.Text = "( e.g. |, l, 1, I, o, 0, O )"; - this.cbExcludeSimilarChars.UseVisualStyleBackColor = true; + cbExcludeSimilarChars.AutoSize = true; + cbExcludeSimilarChars.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + cbExcludeSimilarChars.Location = new System.Drawing.Point(285, 254); + cbExcludeSimilarChars.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbExcludeSimilarChars.Name = "cbExcludeSimilarChars"; + cbExcludeSimilarChars.Size = new System.Drawing.Size(176, 23); + cbExcludeSimilarChars.TabIndex = 7; + cbExcludeSimilarChars.Text = "( e.g. |, l, 1, I, o, 0, O )"; + cbExcludeSimilarChars.UseVisualStyleBackColor = true; // // cbExcludeAmbiguous // - this.cbExcludeAmbiguous.AutoSize = true; - this.cbExcludeAmbiguous.Checked = true; - this.cbExcludeAmbiguous.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbExcludeAmbiguous.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbExcludeAmbiguous.Location = new System.Drawing.Point(244, 248); - this.cbExcludeAmbiguous.Name = "cbExcludeAmbiguous"; - this.cbExcludeAmbiguous.Size = new System.Drawing.Size(211, 23); - this.cbExcludeAmbiguous.TabIndex = 8; - this.cbExcludeAmbiguous.Text = "( { } [ ] ( ) / \\ \' \" ` ~ , ; : . < > )"; - this.cbExcludeAmbiguous.UseVisualStyleBackColor = true; + cbExcludeAmbiguous.AutoSize = true; + cbExcludeAmbiguous.Checked = true; + cbExcludeAmbiguous.CheckState = System.Windows.Forms.CheckState.Checked; + cbExcludeAmbiguous.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + cbExcludeAmbiguous.Location = new System.Drawing.Point(285, 286); + cbExcludeAmbiguous.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbExcludeAmbiguous.Name = "cbExcludeAmbiguous"; + cbExcludeAmbiguous.Size = new System.Drawing.Size(211, 23); + cbExcludeAmbiguous.TabIndex = 8; + cbExcludeAmbiguous.Text = "( { } [ ] ( ) / \\ ' \" ` ~ , ; : . < > )"; + cbExcludeAmbiguous.UseVisualStyleBackColor = true; // // generatedPassword // - this.generatedPassword.BackColor = System.Drawing.SystemColors.MenuText; - this.generatedPassword.Font = new System.Drawing.Font("Calibri", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.generatedPassword.ForeColor = System.Drawing.SystemColors.Window; - this.generatedPassword.Location = new System.Drawing.Point(27, 416); - this.generatedPassword.Name = "generatedPassword"; - this.generatedPassword.ReadOnly = true; - this.generatedPassword.Size = new System.Drawing.Size(351, 33); - this.generatedPassword.TabIndex = 10; - this.generatedPassword.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + generatedPassword.BackColor = System.Drawing.SystemColors.MenuText; + generatedPassword.Font = new System.Drawing.Font("Calibri", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + generatedPassword.ForeColor = System.Drawing.SystemColors.Window; + generatedPassword.Location = new System.Drawing.Point(31, 480); + generatedPassword.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + generatedPassword.Name = "generatedPassword"; + generatedPassword.ReadOnly = true; + generatedPassword.Size = new System.Drawing.Size(409, 33); + generatedPassword.TabIndex = 10; + generatedPassword.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; // // menuStrip1 // - this.menuStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.readHereToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1); - this.menuStrip1.Size = new System.Drawing.Size(475, 24); - this.menuStrip1.TabIndex = 17; - this.menuStrip1.Text = "menuStrip1"; + menuStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); + menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { readHereToolStripMenuItem }); + menuStrip1.Location = new System.Drawing.Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Padding = new System.Windows.Forms.Padding(5, 1, 0, 1); + menuStrip1.Size = new System.Drawing.Size(554, 24); + menuStrip1.TabIndex = 17; + menuStrip1.Text = "menuStrip1"; // // readHereToolStripMenuItem // - this.readHereToolStripMenuItem.Name = "readHereToolStripMenuItem"; - this.readHereToolStripMenuItem.Size = new System.Drawing.Size(52, 22); - this.readHereToolStripMenuItem.Text = "About"; - this.readHereToolStripMenuItem.Click += new System.EventHandler(this.readHereToolStripMenuItem_Click); + readHereToolStripMenuItem.Name = "readHereToolStripMenuItem"; + readHereToolStripMenuItem.Size = new System.Drawing.Size(52, 22); + readHereToolStripMenuItem.Text = "About"; + readHereToolStripMenuItem.Click += readHereToolStripMenuItem_Click; // // CopyButton // - this.CopyButton.BackColor = System.Drawing.SystemColors.InactiveCaptionText; - this.CopyButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.CopyButton.ForeColor = System.Drawing.SystemColors.ControlLightLight; - this.CopyButton.Location = new System.Drawing.Point(382, 416); - this.CopyButton.Name = "CopyButton"; - this.CopyButton.Size = new System.Drawing.Size(69, 30); - this.CopyButton.TabIndex = 9; - this.CopyButton.Text = "Copy"; - this.CopyButton.UseVisualStyleBackColor = false; - this.CopyButton.Click += new System.EventHandler(this.button1_Click_1); + CopyButton.BackColor = System.Drawing.SystemColors.InactiveCaptionText; + CopyButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + CopyButton.ForeColor = System.Drawing.SystemColors.ControlLightLight; + CopyButton.Location = new System.Drawing.Point(446, 480); + CopyButton.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + CopyButton.Name = "CopyButton"; + CopyButton.Size = new System.Drawing.Size(80, 35); + CopyButton.TabIndex = 9; + CopyButton.Text = "Copy"; + CopyButton.UseVisualStyleBackColor = false; + CopyButton.Click += button1_Click_1; // // cbExcludeDuplicateChars // - this.cbExcludeDuplicateChars.AutoSize = true; - this.cbExcludeDuplicateChars.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.cbExcludeDuplicateChars.Location = new System.Drawing.Point(244, 191); - this.cbExcludeDuplicateChars.Name = "cbExcludeDuplicateChars"; - this.cbExcludeDuplicateChars.Size = new System.Drawing.Size(132, 23); - this.cbExcludeDuplicateChars.TabIndex = 6; - this.cbExcludeDuplicateChars.Text = "( e.g. aA,Bb,Cc)"; - this.cbExcludeDuplicateChars.UseVisualStyleBackColor = true; + cbExcludeDuplicateChars.AutoSize = true; + cbExcludeDuplicateChars.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + cbExcludeDuplicateChars.Location = new System.Drawing.Point(285, 220); + cbExcludeDuplicateChars.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbExcludeDuplicateChars.Name = "cbExcludeDuplicateChars"; + cbExcludeDuplicateChars.Size = new System.Drawing.Size(132, 23); + cbExcludeDuplicateChars.TabIndex = 6; + cbExcludeDuplicateChars.Text = "( e.g. aA,Bb,Cc)"; + cbExcludeDuplicateChars.UseVisualStyleBackColor = true; // // label8 // - this.label8.AutoSize = true; - this.label8.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label8.Location = new System.Drawing.Point(24, 191); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(203, 19); - this.label8.TabIndex = 19; - this.label8.Text = "Exclude Duplicate Characters:"; + label8.AutoSize = true; + label8.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label8.Location = new System.Drawing.Point(28, 220); + label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label8.Name = "label8"; + label8.Size = new System.Drawing.Size(203, 19); + label8.TabIndex = 19; + label8.Text = "Exclude Duplicate Characters:"; + // + // cbStartWithLetter + // + cbStartWithLetter.AutoSize = true; + cbStartWithLetter.Checked = true; + cbStartWithLetter.CheckState = System.Windows.Forms.CheckState.Checked; + cbStartWithLetter.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + cbStartWithLetter.Location = new System.Drawing.Point(286, 319); + cbStartWithLetter.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + cbStartWithLetter.Name = "cbStartWithLetter"; + cbStartWithLetter.Size = new System.Drawing.Size(186, 23); + cbStartWithLetter.TabIndex = 20; + cbStartWithLetter.Text = "( Must use a letter first )"; + cbStartWithLetter.UseVisualStyleBackColor = true; + // + // label9 + // + label9.AutoSize = true; + label9.Font = new System.Drawing.Font("Calibri", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + label9.Location = new System.Drawing.Point(31, 319); + label9.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label9.Name = "label9"; + label9.Size = new System.Drawing.Size(114, 19); + label9.TabIndex = 21; + label9.Text = "Start with letter:"; // // GeneratePasswordForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.ClientSize = new System.Drawing.Size(475, 479); - this.Controls.Add(this.cbExcludeDuplicateChars); - this.Controls.Add(this.label8); - this.Controls.Add(this.CopyButton); - this.Controls.Add(this.generatedPassword); - this.Controls.Add(this.cbExcludeAmbiguous); - this.Controls.Add(this.cbExcludeSimilarChars); - this.Controls.Add(this.cbIncludeUppercase); - this.Controls.Add(this.cbIncludeLowercase); - this.Controls.Add(this.cbIncludeNumbers); - this.Controls.Add(this.cbIncludeSymbols); - this.Controls.Add(this.label7); - this.Controls.Add(this.label6); - this.Controls.Add(this.label5); - this.Controls.Add(this.label4); - this.Controls.Add(this.passwordLengthTextBox); - this.Controls.Add(this.label3); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.GenerateButton); - this.Controls.Add(this.menuStrip1); - this.ForeColor = System.Drawing.SystemColors.ControlLightLight; - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.Name = "GeneratePasswordForm"; - this.Text = "Strong Password Generator"; - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + BackColor = System.Drawing.Color.FromArgb(64, 64, 64); + ClientSize = new System.Drawing.Size(554, 553); + Controls.Add(cbStartWithLetter); + Controls.Add(label9); + Controls.Add(cbExcludeDuplicateChars); + Controls.Add(label8); + Controls.Add(CopyButton); + Controls.Add(generatedPassword); + Controls.Add(cbExcludeAmbiguous); + Controls.Add(cbExcludeSimilarChars); + Controls.Add(cbIncludeUppercase); + Controls.Add(cbIncludeLowercase); + Controls.Add(cbIncludeNumbers); + Controls.Add(cbIncludeSymbols); + Controls.Add(label7); + Controls.Add(label6); + Controls.Add(label5); + Controls.Add(label4); + Controls.Add(passwordLengthTextBox); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(GenerateButton); + Controls.Add(menuStrip1); + ForeColor = System.Drawing.SystemColors.ControlLightLight; + FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + MaximizeBox = false; + Name = "GeneratePasswordForm"; + Text = "Strong Password Generator"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); } #endregion @@ -334,11 +381,13 @@ private void InitializeComponent() private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox passwordLengthTextBox; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label6; private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox passwordLengthTextBox; private System.Windows.Forms.CheckBox cbIncludeSymbols; private System.Windows.Forms.CheckBox cbIncludeNumbers; private System.Windows.Forms.CheckBox cbIncludeLowercase; @@ -350,7 +399,7 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem readHereToolStripMenuItem; private System.Windows.Forms.Button CopyButton; private System.Windows.Forms.CheckBox cbExcludeDuplicateChars; - private System.Windows.Forms.Label label8; + private System.Windows.Forms.CheckBox cbStartWithLetter; } } diff --git a/StrongPassGenerator/GeneratePasswordForm.cs b/StrongPassGenerator/GeneratePasswordForm.cs index 20d92bd..52ad5bc 100644 --- a/StrongPassGenerator/GeneratePasswordForm.cs +++ b/StrongPassGenerator/GeneratePasswordForm.cs @@ -38,7 +38,8 @@ private void button1_Click(object sender, EventArgs e) IncludeUppercase = cbIncludeUppercase.Checked, ExcludeDuplicates = cbExcludeDuplicateChars.Checked, ExcludeSimilar = cbExcludeSimilarChars.Checked, - ExcludeAmbiguous = cbExcludeAmbiguous.Checked + ExcludeAmbiguous = cbExcludeAmbiguous.Checked, + StartWithLetter = cbStartWithLetter.Checked }; generatedPassword.Text = password.Generate(options); @@ -51,5 +52,6 @@ private void button1_Click_1(object sender, EventArgs e) { Clipboard.SetText(generatedPassword.Text); } + } } diff --git a/StrongPassGenerator/GeneratePasswordForm.resx b/StrongPassGenerator/GeneratePasswordForm.resx index f63f5ba..aaad322 100644 --- a/StrongPassGenerator/GeneratePasswordForm.resx +++ b/StrongPassGenerator/GeneratePasswordForm.resx @@ -1,17 +1,17 @@  - diff --git a/StrongPassGenerator/Password.cs b/StrongPassGenerator/Password.cs index fe29538..643bf90 100644 --- a/StrongPassGenerator/Password.cs +++ b/StrongPassGenerator/Password.cs @@ -18,6 +18,7 @@ public class PasswordOptions public bool ExcludeDuplicates { get; set; } public bool ExcludeSimilar { get; set; } public bool ExcludeAmbiguous { get; set; } + public bool StartWithLetter { get; set; } } public class Password @@ -61,7 +62,7 @@ public string Generate(PasswordOptions options) // Loop through this until we meet the length requirement do { - password = GeneratePassword(possibles, password, options.PasswordLength); + password = GeneratePassword(possibles, password, options.PasswordLength, options.StartWithLetter); if (options.ExcludeDuplicates) { @@ -99,7 +100,7 @@ private string StripConfusingChars(string password) return (password); } - public string GeneratePassword(string possibles, string password, int targetLength) + public string GeneratePassword(string possibles, string password, int targetLength, bool startWithLetter) { char previouschar = ' '; @@ -113,7 +114,15 @@ public string GeneratePassword(string possibles, string password, int targetLeng continue; } - password += newchar; + // User wants it to start with a letter? + if (password.Length == 0 && startWithLetter) + { + if (char.IsAsciiLetter(newchar) == false) + { + continue; + } + } + password += newchar; previouschar = newchar; } diff --git a/StrongPassGenerator/Properties/AssemblyInfo.cs b/StrongPassGenerator/Properties/AssemblyInfo.cs index 43f6f03..b78b165 100644 --- a/StrongPassGenerator/Properties/AssemblyInfo.cs +++ b/StrongPassGenerator/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.0.0")] -[assembly: AssemblyFileVersion("2.0.0.0")] +[assembly: AssemblyVersion("2.1.0.0")] +[assembly: AssemblyFileVersion("2.1.0.0")]