crunch -d 选项,带有简单的 aA 字符集

crunch -d 选项,带有简单的 aA 字符集

抱歉,如果这很简单,但是我找不到这个应该是简单问题的答案。

我只是将命令传递给 crunch:

$ crunch 3 3 aA -d 1@

我期望 crunch 生成包含 3 个字符的字符串,同时将小写字母的数量限制为 1:aAAAaAAAaAAA。但是,我的输出是:

Crunch will now generate the following number of lines: 2
aAa
AaA

我尝试设置-d 1@ -d 3,保留大写字母,但结果相同。我理解错了什么?

非常感谢您的回复,

答案1

我在这里理解错了什么?

crunch不像这样工作,手册有点误导。一旦你理解了它的逻辑,它就说得通了;而要理解它,你需要示例(手册中有)、反复试验。

或者也许是这个答案。:)

来自手册:

crunch <min-len> <max-len> [<charset string>] [options]

[…]

charset string
您可以在命令行上指定 crunch 使用的字符集,或者如果您将其留空,crunch将使用默认字符集。顺序必须是小写字符、大写字符、数字,然后是符号。如果您不遵循此顺序,您将无法获得想要的结果。您必须指定字符类型的值或加号。[…]

手册中提到“小写字符”、“大写字符”、“数字”和“符号”时,可能会说“集合 1”、“集合 2”、“集合 3”和“集合 4”。默认集合分别对应于手册使用的术语,但除此之外,“小写字符”只是一个抽象的“集合 1”。在此上下文@中指的是“集合 1”,也%指的是“集合 3”。该工具不会检查“集合 1”或“小写字符”是否确实是小写字符!

考虑这个命令:

crunch 1 1 aA bB cC dD
#          ^^          these are "lower case characters"
#             ^^       there are "upper case characters"
#                ^^    these are "numbers"
#                   ^^ these are "symbols"

输出为

a
A

因为crunch默认情况下只使用“小写字符”。如果我们明确告诉它使用“数字”

crunch 1 1 aA bB cC dD -t %

那么它将使用第三组符号:

c
C

您的原始命令

crunch 3 3 aA -d 1@

指定aA为“小写字符”集。是的,你确实说crunchA是“小写字符”。现在-d

-d numbersymbol
限制重复字符的数量。-d 2@限制小写字母以输出像aab和这样的aacaaa不会生成,因为这是3个连续的字母a。格式为数字然后是符号,其中数字是连续字符的最大数量,符号是要限制的字符集的符号,即@,%^[…]

因此,您说crunch任何“小写字符”(来自您的集合,即aA)最多可以连续出现 1 次。实际上,您得到的输出既不包含aa也不包含AA


有时忘记“小写字符”等,而用“集合 N”来思考会很有用。手册似乎固定在“小写字符”应全部为小写等前提上。不过(至少在 Ubuntu 中)有一个文件/usr/share/crunch/charset.lst可以与一起使用-f;它定义了混合四个基本集合或其片段的各种集合。这强烈建议任何充当“小写字符”(或“符号”,或……)的集合都得到默默支持。

因此,如果您需要生成字符串,使得第一个字符是a0或 ,(而第二个字符是a1),那么可以这样做:

crunch 2 2 'a0(' 'a1)' -t @,

试一试。aa输出中出现了注意,但它既不是“a来自第一个集合两次”,也不是“a来自第二个集合两次”。模式@,保证第一个a来自第一个集合,第二个a来自第二个集合。然而,当涉及到时,这种区别并不那么严格-d。命令

crunch 2 2 'a0(' 'a1)' -t @, -d 1@

将要不是生成aa。这一观察导致了以下技巧:

crunch 3 3 aA a -d 1,

输出为:

aAa
aAA
AaA
AAa
AAA

这几乎就是你想要的。机制似乎是这样的:

  1. 没有-t,所以该工具仅使用第一组。
  2. 它生成所有可能的输出(如crunch 3 3 aA)。
  3. 它会丢弃与 相矛盾的行-d 1,。此选项表示输出中不能有aa。选项引用第二组并不重要,所有输出都来自第一组。没有aa。句号。

你没有预料到,aAa因为你误解-d 1@为“限制重复的数量”,而它是“限制连续的重复”。


最后请注意,答案主要基于观察,而不是文档。特别是这个技巧似乎没有文档记录,它可能只是crunch幕后工作的偶然结果。未来的升级可能会使该工具在这个问题上表现不同,而不会破坏记录特征。

相关内容