使用 WordNet 的语义密码生成器
C#+IronPython 2+WordNet+Python+.NET = w00t!

目录
引言
饱受“密码写作障碍”的困扰?好吧,pswrdgeniron 将为你解决密码创建的烦恼。这个应用程序的核心是用 Python 编写的,而 Microsoft 的 IronPython 2.0A4 是它连接 .NET 世界的桥梁。
pswrdgen
IronPython 1 和 2 之间存在许多差异。在撰写本文时,IronPython 2 仍处于 Alpha 阶段,但它仍然可以完成工作。这两个版本之间最大的区别之一是非原生 IronPython 对象与 PythonEngine 之间传递变量的处理方式。在版本 1 中,使用 PythonEngine.Globals
方法来设置和获取在 Python 代码中创建的变量。该方法在 IronPython 2 中已被移除,取而代之的是使用 Microsoft.Scripting.ScriptDomainManager.
。命名空间很长?是的,但它符合 Microsoft 的动态语言运行时 (DLR) 模型。那么这个 pswrdgeniron 呢?好吧,让我解释一下。pswrdgen.py 是用 CPython 2.4 编写的,设计用于在任何操作系统上运行。它是一个 CLI 应用程序。pswrdgeniron 导入 pswrdgen 中的所有方法,并为 Windows 用户提供 GUI。
CurrentManager.Host.DefaultModule.SetVariable

图 1 显示了 Form1_Load
方法触发 bootstrap()
,该方法通过 IronPythonEngine
(“pe”)处理 pswrdgen.py 的导入。完成后,在 pswrdgeniron 中构造并行变量。bootstrap()
还会检查并确保用户已安装 Python24。它需要导入 pswrdgen.py 的 OS 模块。在 IronPythonEngine.pe 中,创建了一个名为“i”的 pswrdgen.py 实例。用户可以通过修改用户界面中的控件来更改设置的值。大多数其他控件的自动更新取决于密码的最小长度。一旦更改了“最小长度”控件,它就会更改其他控件,以避免不合逻辑的设置。例如,如果密码的最小长度是 6,你不能超过 6 个大写字母,所以 7 将不会在下拉列表中作为有效选择出现。当用户激活 bRun_Click 时,将调用 i.run()
,并将 IronPythonEngine.pe 传递给它。pswrdgen.py 的“run
”方法只生成一个完整的密码,所以这个调用会循环到 GENCOUNT
(生成密码计数)。
当调用 IronPythonEngine
返回对象时,有必要将对象转换回其原始类型,并在某些情况下返回一个实例。例如,SWAPS 是一个 PythonDictionary
对象,它从 tbSwapSet
的 textbox
文本创建,并需要一个该对象的实例,因此调用了 Clone()
。
SWAPS = (PythonDictionary)pe.EvaluateAs(tbSwapSet.Text.Trim()).Clone();
可以使用 pswrdgeniron 或 pswrdgen.py 添加自定义单词文件。使用 pswrdgeniron 需要浏览到新的单词列表文件。如果文件有效,它将被发送到 IronPythonEngine
并添加到 i.WORDFILELISTS
。目前没有办法直接使用 pswrdgeniron 保存自定义文件添加。解决办法是直接更新 pswrdgen.py。这个解决办法 在此 (Issue 17) 进行了描述。所有其他设置**都**直接保存到 pswrdgen.py 本身。当 bSavesettings_Click
触发时,会调用 pe.ExecuteCommand("i._savesettings()")
,IronPythonEngine
会处理打开 pswrdgen.py 以将更改追加到设置部分。
pswrdgen 功能
如果您认为密码可以安全并且管理员仍然能够记住它们,那么您可能会喜欢使用 pswrdgen 和 pswrdgeniron。
- 自动从 WordNet 中选择新颖的名词
- 选定单词中字符的随机大写
- 定义您自己的替换规则集以用于选定的单词
- 选择您想要的密码长度
- pswrdgen.py 的自动更新功能
- 将随机字符插入选定的单词中
- 使用自定义单词列表文件,而不仅仅是 WordNet
- 保存您的自定义设置(不保存自定义单词列表)
如果您只想运行该应用程序,请确保您已下载 WordNet 和 .NET 2.0 运行时,然后再运行二进制 Windows 安装程序。如果您想处理源代码,您需要 Microsoft 的 IronPython 2.0Ax 以及对它的引用和 Microsoft.Scripting
。
结论
pswrdgeniron 是一个语义密码生成器,它使用 WordNet、随机大写和字符替换。也许我搜索互联网不够久,没有找到类似这个应用程序的东西来生成我喜欢的密码。这个应用程序可以生成有趣的、安全的、管理员能够记住的密码,并且与我这样犹豫不决的人相比,它的速度快得惊人。谁知道呢,您甚至可能会发现一些您已经忘记的单词,或者在创建选择列表时学会一些新的恐龙名字。先决条件:WordNet 和 .NET 2.0 运行时。
参考文献
更新
- 9/3/07
- 文章发布 - 在 Microsoft 的 IronPython 2.0A3 (2.0.10724.00) 上创建和测试,运行于 .NET 2.0.50727.832、Windows XP、MSVS 2005
- 9/6/07
- 将章节从“跨平台”更改为“C# 编程”
- 9/18/07
- 添加了随机插入
- 添加了配置保存
- 使用 IronPython 2 Alpha4 测试
- 9/19/07
- 上传新版本 0.3.5 以解决 IronPython 不处理 Python25 和/或用户计算机上没有 Python24 的问题
- 10/05/07
- 上传新版本 0.4.0
- 添加了下拉组合框以处理自定义 Word 文件集成(单词必须在自定义单词文件的每一行的开头)
- 10/07/07
- 上传新版本 0.4.1:修复了两个小的 GUI 错误