[trick] 用 es6 特性玩爆破字典生成
发布于 9 年前 作者 ChiChou 5954 次浏览 最后一次编辑是 8 年前 来自 分享

昨天扫了一眼新闻,node.js v6 终于内置了对解构赋值的支持…… 那么现在 python 里不少好玩的特性都可以直接在 node 里运行了。

照着写了一个用 generator 做的爆破字典生成器,通过给定集合和长度,可以暴力生成可能的组合,适用于密码字典、域名爆破等场景……

function *selection(set, n) {
  if (typeof set === 'string') {
    set = set.split('');
  } else if (!Array.isArray(set)) {
    throw Error('Invalid set, must be a string or an array')
  }
  
  if (n)
    for (let [i, v] of set.entries())
      for (let sel of selection(set, n - 1))
        yield [v].concat(sel)
  else
    yield []
}

// 枚举小写字母和数字、4 位长度的字符串所有可能组合,除了控制台会刷屏之外执行起来并没有太大压力
const alphabet = 'abcdefghijklmnopqrstuvwxyz', numeric = '0123456789';
for (let item of selection(alphabet + numeric, 4)) {
  console.log(item.join(''))
}
回到顶部