[trick] 用 es6 特性玩爆破字典生成
昨天扫了一眼新闻,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(''))
}