Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Semantic Password Generator that Uses WordNet

0.00/5 (No votes)
5 Oct 2007 1  
C#+IronPython 2+WordNet+Python+.NET = w00t!

Table of Contents

Introduction

Want a cure for password writer's block? Well, here is pswrdgeniron to iron out your password creation blues. The heart of this application is written in Python and Microsoft's IronPython 2.0A4 is its bridge to the .NET world.

pswrdgen

There are many differences between IronPython 1 and 2. As of this writing, IronPython 2 is still Alpha, however it can still get the job done. One of the biggest differences between the two versions is the handling of passing variables between the non-native IronPython objects and the PythonEngine. In version 1 the PythonEngine.Globals method was used to set and get variables created in Python code. That method has been removed in IronPython 2 and in its place is the use of Microsoft.Scripting.ScriptDomainManager.
CurrentManager.Host.DefaultModule.SetVariable
. Long namespace? Yes it is, but it fits with Microsoft's Dynamic Language Runtime (DLR) model. So what about this pswrdgeniron? Well, let me explain. pswrdgen.py is written in CPython 2.4 and is designed to run on any operating system. It is a CLI app. pswrdgeniron imports all of the methods in pswrdgen and provides a GUI for Windows users.

(Figure 1) Flow of pswrdgen.py, IronPython, and pswrdgeniron

Figure 1 shows the Form1_Load method fire bootstrap() which handles importing the pswrdgen.py via the IronPythonEngine ("pe"). Once this is done, the parallel variables get constructed in pswrdgeniron. bootstrap() also checks and makes sure the user has Python24. It is needed to import the OS module for pswrdgen.py. Within the IronPythonEngine.pe, a pswrdgen.py instance was created named "i". The user may change the values of the settings by modifying the controls in the user interface. Most of the autoupdating of the other controls are dependent upon the minimum length of the password. Once when "Min Length" control is changed, it changes other controls to avoid non-logical settings. For example, if the minimum length of a password is 6, you cannot capitalize more that 6, so 7 will not be listed as a valid choice in the dropdownbox control. When the user activates bRun_Click, "i.run()" is called with IronPythonEngine.pe. pswrdgen.py's "run" method generates just one completed password so this call is looped to GENCOUNT (GENerate password COUNT).

When calling for objects to be returned from the IronPythonEngine, it is necessary to cast the objects back and in some cases return an instance. For example, SWAPS is a PythonDictionary object created from the textbox text from tbSwapSet and needs an instance of the object, so Clone() is called.

SWAPS = (PythonDictionary)pe.EvaluateAs(tbSwapSet.Text.Trim()).Clone();

Custom Word files can be added using pswrdgeniron or pswrdgen.py. Using pswrdgeniron involves browsing to the new wordlist file. If the file is valid, it will be sent to the IronPythonEngine and added to i.WORDFILELISTS. There is currently no way to save custom file additions using pswrdgeniron directly. The workaround to do this is to update pswrdgen.py directly. This workaround is described here (Issue 17). All other settings are saved directly to the pswrdgen.py itself. When bSavesettings_Click is fired pe.ExecuteCommand("i._savesettings()") is called and the IronPythonEngine handles opening pswrdgen.py to append the changes to the settings section.

pswrdgen Features

If you believe passwords can be secure and still be remembered by administrators, then you may enjoy using pswrdgen and pswrdgeniron.

  • Automatically chooses fresh nouns from WordNet
  • Random capitalization of characters in chosen words
  • Define your own swapping ruleset to use in chosen words
  • Choose the lengths of your desired passwords
  • Auto-update feature for pswrdgen.py
  • Random character insertion into a chosen word
  • Use custom word list files not just WordNet
  • Save your custom settings (Does not save custom word lists)

If you just wish to run the application, make sure you have downloaded WordNet and .NET 2.0 runtime before running the binary Windows Installation setup. If you wish to work with the source, you will need Microsoft's IronPython 2.0Ax and reference to it and Microsoft.Scripting.

Conclusion

pswrdgeniron is a semantic password generator that uses WordNet, random capitalization, and character swapping. Maybe I didn't search the Internet long enough to find something like this application to generate passwords that I like. This application generates amusing and secure passwords that administrators can remember and it does this at lightning speeds compared to indecisive people like myself. Who knows, you might even discover some words you have forgotten about or learn some new dinosaur names while creating your lists of choices. Prerequisite: WordNet and .NET 2.0 runtime.

References

Updates

  • 9/3/07
    • Article posted - Created and tested on Microsoft's IronPython 2.0A3 (2.0.10724.00) on .NET 2.0.50727.832, Windows XP, MSVS 2005
  • 9/6/07
    • Changed section to C# Programming from Cross Platform
  • 9/18/07
    • Added random insertion
    • Added configuration saving
    • Tested with IronPython 2 Alpha4
  • 9/19/07
    • Uploaded new version 0.3.5 to address IronPython not handling Python25 and/or no Python24 residing on user's computer
  • 10/05/07
    • Uploaded new version 0.4.0
    • Added dropdown combobox for custom Word file integration handling (Words must be in front of each line in the custom word file)
  • 10/07/07
    • Uploaded new version 0.4.1: Fixed two minor GUI bugs

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here