65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 WordNet 的语义密码生成器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.93/5 (8投票s)

2007年9月4日

CPOL

4分钟阅读

viewsIcon

39285

downloadIcon

784

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.
CurrentManager.Host.DefaultModule.SetVariable
。命名空间很长?是的,但它符合 Microsoft 的动态语言运行时 (DLR) 模型。那么这个 pswrdgeniron 呢?好吧,让我解释一下。pswrdgen.py 是用 CPython 2.4 编写的,设计用于在任何操作系统上运行。它是一个 CLI 应用程序。pswrdgeniron 导入 pswrdgen 中的所有方法,并为 Windows 用户提供 GUI。

(图 1) pswrdgen.py、IronPython 和 pswrdgeniron 的流程

图 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 对象,它从 tbSwapSettextbox 文本创建,并需要一个该对象的实例,因此调用了 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 错误
© . All rights reserved.