重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl解决方案。 |
在“您称之为强密码?”中,参赛人员必须根据提供的条件编写一个脚本来确定密码的强度。
| 关于此项活动 | |
| 活动方案 | |
| 如何输入 |
小组 | 高级 |
最终期限 | 2008 年 2 月 26 日,星期二(太平洋标准时间上午 8:00) |
奖励点数 | 10 |
在当今时代,人们常被鼓励在需要创建或更改密码时尽可能使用“强”密码。它确实是个好建议,但也带来了一些问题:1) 究竟什么是强密码,2) 我们如何用相同的方式判断一个给定密码的强弱?活动 5 旨在帮助您回答这两个问题。
在本次活动中,您将创建一个可确定密码“强度”的脚本。密码强度将通过对其进行以下检查来确定。此脚本必须执行以下所有操作:
| • | 确保密码并非某个实际的词。密码 rhubarb 无法通过本测试,因为 rhubarb 是个实际的词。要确定某个词是否为实际词,请始终使用文件 WordList.txt,它是一个官方词列表,包含在脚本编写比赛参赛人员包之内。 (请务必将此文件放入文件夹 C:\Scripts 中。) |
| • | 确保密码去掉最后一个字母后并非某个实际的词。例如,密码 rhubarb5 无法通过此测试,因为:如果删除最后一个字母,剩余字符值 – rhubarb – 是一个实际的词。 |
| • | 确保密码去掉第一个字母后并非某个实际的词。例如,密码 @rhubarb 无法通过此测试,因为:如果删除第一个字母,剩余字符值 – rhubarb – 是一个实际的词。 |
| • | 确保密码不能简单地将 0(零)替换为字母 o(无论大写 O 还是小写 o)。例如,密码 t00lbox 无法通过此测试。为什么呢?因为如果将每个零替换成字母 O,就会得到一个实际的词:toolbox。 |
| • | 确保密码不能简单地将 1(一)替换为字母 l(无论大写 L 还是小写 l)。例如,密码 f1oti11a 无法通过此测试。为什么呢?因为如果将每个一替换成字母 L,就会得到一个实际的词:flotilla。 |
| • | 确保密码至少为 10 个字符,但不能超过 20 个字符长。密码 rhubarb 无法通过此测试,因为它只有 7 个字符。 |
| • | 确保密码包括至少一个数字(数字 0 到 9)。密码 rhubarb%$qwC 无法通过此测试,因为它未包括数字。 |
| • | 确保密码包括至少一个大写字母。密码 rhubarb 无法通过此测试,因为它未包括大写字母。 |
| • | 确保密码包括至少一个小写字母。密码 RHUBARB 无法通过此测试,因为它未包括小写字母。 |
| • | 确保密码包括至少一个符号。它可以是任意字符(大写或小写字母,或者数字);也可包括(但不限于)符号 ~、@、#、$、% 和 ^。 |
| • | 确保密码并不包括四个连续(或更多)小写字母。密码 rhubARB 无法通过此测试,因为它包括四个连续小写字母 (rhub)。 |
| • | 确保密码并不包括四个连续(或更多)大写字母。密码 rHUBArb 无法通过此测试,因为它包括四个连续大写字母 (HUBA)。 |
| • | 确保密码并不包括任何重复字符。密码 rhubarb 无法通过此测试,因为它包括两个 r 和两个 b。 |
注意。确实有许多要记的条件,对吧?为帮助您追踪所有事项,我们在参赛人员包中放置了一个检查表(Password_Checklist.doc)。 |
要成功完成此活动,您的脚本必须接受某个可能密码作为命令行参数,然后评定该密码。例如,如果要评定密码 rhubarb33! 的强度,脚本的开头类似以下命令:
myscript.vbs rhubarb33!
脚本开始的密码分数应为 13;即意味着通过所有检查的密码的最终分数为 13。从参数集检索密码后(并且我们将每次只向脚本传递一个密码),脚本应针对密码运行之前提到的每个检查。如果密码通过某个指定检查(例如检查密码是否为实际词的测试),脚本随后应继续下一测试。这应该是比较简单的。
那么,如果密码未能通过指定检查又会如何呢?例如,密码 rhubarb 将无法通过规定密码不能具有四个连续小写字母的测试。在这种情况下,脚本必须执行两项操作:
| • | 从密码分数中减 1。例如,如果密码分数为 11 并且脚本对四个连续小写字母的检查失败,则密码分数应降到 10 |
| • | 返回一条消息,说明提议的密码无法通过此测试。例如,此时应返回类似如下的消息: Four consecutive lowercase letters in password. |
完成所有检查后,脚本应使用以下等级评定密码:
| • | 低于 6 的分数代表弱密码。 |
| • | 分数 7、8、9 或 10 代表中等强度密码。 |
| • | 分数 11 或更高代表强密码。 |
您应返回分数和密码评定。例如:
A password score of 4 indicates a weak password.
比方说,检查密码 rhubarb33! 时应得到以下输出:
No uppercase letters in password. Four consecutive lowercase letters in password. Duplicate letters in password. A password score of 10 indicates a moderately-strong password.
这就是您需要完成的全部功能。
编写完脚本后,单击适当链接提交答案:
| • | |
| • | |
| • |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 5、Advanced Windows PowerShell: Event 5 或 Advanced Perl: Event 5。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
| • | 在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
| • | 您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
| • | 您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer
USA
Northern Iowa User Group
For i = 1 to 100
Wscript.Echo i
Next