Because some of my own applications required the ability to create random passwords, I decided to write a small dll that will allow me to implement the generation of random passwords in a fast and easy way.
You can download the dll from
PVEPasswordGenerator.dll (20.0 KiB, 835 hits)
Create a new Visual Studio project. In my example below, I’ve used a Windows Console application in C#, but you can use the dll in any Visual Studio project.
Click “Project” – “Add reference”. Open the “Browse” tabsheet and browse to the dll file. Select the dll file and click “OK” to add the reference to your project.
You should now see a reference to the dll in the Visual Studio Solution Explorer.
The simple console application that demonstrates some of the possibilities of the password generator looks like this :
using System; using System.Collections.Generic; using System.Text; namespace RandomPW_Test { class Program { static void Main(string[] args) { Console.WriteLine("\nFull character set passwords :"); for (int i = 0; i < 15; i++) { //create password will all character groups Console.WriteLine(PVEPasswordGenerator.GeneratePassword(20)); } Console.WriteLine("\nLowercase passwords :"); for (int i = 0; i < 15; i++) { //create lowercase passwords only Console.WriteLine(PVEPasswordGenerator.GeneratePassword(20, true, _
false, false,false)); } Console.WriteLine("\nUppercase passwords :"); for (int i = 0; i < 15; i++) { //create uppercase passwords only Console.WriteLine(PVEPasswordGenerator.GeneratePassword(20, false, _
true, false, false)); } Console.WriteLine("\nPasswords with numbers and special characters :"); for (int i = 0; i < 15; i++) { //create passwords with numbers and special characters Console.WriteLine(PVEPasswordGenerator.GeneratePassword(20,false,_
false,true,true)); } } } }
The output of the console application looks like this :
Full character set passwords : 6P4Z8SrfwiFx7m3Rs09T DR3qZJ4jtxBXon82961P 9P2L0TmxgeXf1q3Mc67A 9QMP8pmnkcZ7B26fj03Y nQNZ0bAo8Hke732WisX1 FEjtW92eSx18QL4r57zR qj37wKM2m6Ld5eTBFS4t 0Z1R5WjnMt2d8o6Ez3fY fmigD8E962qXnBN75FWr 3rSgHwi9cxAy07WP682D XgH8xi54r0E2Z9JmNS3f FYpS524d7Hr9DX1axjZ8 4rd8k1f673b0CFRjWDPi 9k0jXWb3a5Aw7cNB8C6f 6iL9kfe48Xay25MHDpT1 Lowercase passwords : azykednfjpbcimwosxtg kpomfdzganybjreqstic jrpwfnxcmbyagqdsztoe aksmzewxtijqpncfrobd rictamjxqpdgyksnwzfb agdemnwzjpkyxsoqtcir xpdckamtbgfyrenqisjz srwbmeyqtfzoanijdcgp psoykjxzgmdbqcrfiwat qntmzkxfpjawieocrdsg qjcgtiwebymsoxzfnkdr tbpwknazejcsmdgrqxyi eidamwpgsjnftrzqykox adjopbwmetxyinfgrqzc kgebzpmadjtnoxwrsqic Uppercase passwords : WXRGKPSNJYMEZLBFCTDH ATCEHXSJQFWDNBRZPLKM TWBASQHFERPMCZLJXDYG QZWADLNXHGFCEJKSRMBP PRBMTFWYLZSXGQEDJHAN NTWXFRGDBPASYQEHMLJZ YADSPLZQFJKWEXMBRHGN ZEFLGMTDKCBJYAWQXPNR JKQDHSTMYRBCPNAWLEZF PHNSLJYZFBQMADWRCEXK BAFNLWJPEHQRDGSXKYCM ZHQYNEBFGTCDSRKLMPAW SBXNZKHWCAQFTDPYJLME SRNKZYDFLBCAHWGMTXQP QHKXMSPALWJTGEZFRYCN Passwords with numbers and special characters : 37$@19&:50;]8=%642,_ 32#+98];06}/1&|574,& 46&{57?&18<_2$%309#, 08{!65*[97_.2-<134?] 85<_36&?10+*2}>749@] 28|@13._96<;0+*547}& 52$/17;?34[%0]:968!& 35[.26],78|}1:!094%$ 57<-26[}09]&1&$384>? 86$<39/|=0%}215]; 72?!36;+04}|5*[198]> 69!{21;>54}+7%[308?| 61_;43.#87*{9?&052!, 45@!18{#73:-6%=902$] 31?/64[-57];9_=082%+
The GeneratePassword() function takes up to 5 arguments :
(number of characters) of the password.
will contain lowercase characters
will contain uppercase characters
will contain numbers
will contain special characters
Character sets :
If you launch the function without any parameters, a password of 8 characters will be created, using all character sets.
The dll works fine for me, but if you encouter bugs or strange behaviour, let me know.
You can use your own character set by setting some variables prior to generating the password.
These 4 variables are :
(string) PW_CHARS_LCASE
(string) PW_CHARS_UCASE
(string) PW_CHARS_NUMERIC
(string) PW_CHARS_SPECIAL
In C#, this is how you can set or get the values of those variables :
Console.WriteLine("\nCurrent lcase character set is : " + PVEPasswordGenerator.PW_CHARS_LCASE); Console.WriteLine("\nLowercase password, but with limited character set of abcde"); PVEPasswordGenerator.PW_CHARS_LCASE = "abcde"; for (int i = 0; i < 15; i++) { Console.WriteLine(PVEPasswordGenerator.GeneratePassword(20,true,false,false,false)); } //set all new characters PVEPasswordGenerator.PW_CHARS_LCASE = "abc"; PVEPasswordGenerator.PW_CHARS_UCASE = "ABC"; PVEPasswordGenerator.PW_CHARS_NUMERIC = "012"; PVEPasswordGenerator.PW_CHARS_SPECIAL = "-+?"; Console.WriteLine("\nFull character set passwords, with limited set of characters"); for (int i = 0; i < 15; i++) { Console.WriteLine(PVEPasswordGenerator.GeneratePassword(20, true, true, true, true)); }
The output of these 2 iterations looks like this :
Current lcase character set is : abcdefghijklmnopqrstuvwxyz Lowercase password, but with limited character set of abcde bbadddeacadecebcceab dcdabcecbeabacaeeddb cdbaecdbbaeeccadabed aaaeecebdbcdddacecbb dacbcceebbdaebdcedaa bbdeabdcaadccabeedce edcedbdeaacbbacecabd eddbaaaeebbcecdcdcab cdeacdbaaecabbeeddbc dbdcacaeabeedabccedb aacadabddcbdbecceeeb beeabcedaddcdbccaeba ebaebedddccaccaebdab cccbdabeeaadadcdeebb cdeadadbeeabcdbcaebc Full character set passwords, with limited set of characters ?C-a+-c1bB12B2A?bc0A 1+-aA0cBB?0C12Ccbb?+ cb2+01-aC0?AAcB1?-aC ?+bCaCb-cAA0-1?2cB02 cCA-b1?a2A?-10ac0+BC +?cAacB2bCB0+2-0bC1- -b0ac1bBC0?c+A-2AB1+ +A+12C0c0B?1CBbaa-c? bC?A2a-C02-BBb1a?+c1 2bBc1?Bb2ACaa?0++A-1 1A2-B-Ba0C+c?cCb?1a0 2-A?2Cb?+0aB-caAbC11 220BaA-cbB01??+c-aCC A2B-cC00AaC?2+1c-b?b 101+cBa?abcC?+2BAA2-
Note : In case you were wondering : the dll does not use the default Windows randomizer, which is based on the current time. (So if you use that randomizer, all random functions within the same second will return the same value.). In fact, my dll uses a random seed (and not the current time), and the string that results from the password generator routing is then scrambled again.
Tags:
© Corelan Consulting BV. All rights reserved. The contents of this page may not be reproduced, redistributed, or republished, in whole or in part, for commercial or non-commercial purposes without prior written permission. See the Terms of Use and Privacy Policy for details.