66 lines
2.3 KiB
C#
66 lines
2.3 KiB
C#
using System.Text;
|
|
|
|
namespace Password_Generator
|
|
{
|
|
static class PasswordGenerator
|
|
{
|
|
private static string RandomStr(int length, bool no_symbols = false)
|
|
{
|
|
StringBuilder builder = new StringBuilder();
|
|
Random rnd = new Random();
|
|
for (int i = 0; i < length; i++)
|
|
{
|
|
if (rnd.Next(0, 101) <= 60) //60% chance for a character
|
|
{
|
|
char c = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * rnd.NextDouble() + 65))); //random character
|
|
if (no_symbols && Char.IsSymbol(c))
|
|
{
|
|
while (Char.IsSymbol(c))
|
|
{
|
|
c = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * rnd.NextDouble() + 65))); //random character
|
|
}
|
|
}
|
|
builder.Append(c);
|
|
}
|
|
else //40% change for number
|
|
{
|
|
builder.Append(Convert.ToChar(rnd.Next(0, 10)));
|
|
}
|
|
}
|
|
|
|
return builder.ToString();
|
|
}
|
|
|
|
public static string? New(string recipient, int length, bool no_symbols = false)
|
|
{
|
|
try
|
|
{
|
|
Process proc = new Process()
|
|
{
|
|
StartInfo = new ProcessStartInfo
|
|
{
|
|
FileName = "echo", //TODO: pipe the return value of RandomStr to gpg with the --quiet --encrypt --recipient {recipient} flags
|
|
Arguments = $"{RandomStr(length, no_symbols)} | gpg --quiet --encrypt --recipient {recipient}",
|
|
UseShellExecute = false,
|
|
RedirectStandardOutput = true,
|
|
CreateNoWindow = true
|
|
}
|
|
};
|
|
proc.Start();
|
|
|
|
StringBuilder builder = new StringBuilder();
|
|
while (!proc.StandardOutput.EndOfStream)
|
|
{
|
|
builder.Append(proc.StandardOutput.ReadLine());
|
|
return builder.ToString();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|