如何让Crunch生成无重复字符的16位混合字符词表
实现Crunch实时生成无重复字符的16位词表并验证
我需要用Crunch自带的mixalpha-numeric-all字符集(路径为/usr/share/crunch/charset.lst)生成16位且每个字符仅出现一次的词表。
尝试过的命令及问题
执行以下命令后,生成的结果仍存在重复字符(例如abababab...),不符合每个字符唯一的要求:
crunch 16 16 -f /usr/share/crunch/charset.lst mixalpha-numeric-all -d 1@,%^
验证脚本
我尝试用sed处理无效,于是编写了以下bash脚本,用于验证单词是否存在重复字符:
#!/usr/bin/env bash word=$1 char_count=0 word_length=${#word} function log { echo $1 >> log.txt } log "待验证单词: $word" log "单词长度: $word_length" # 返回值: 0 = 无重复字符, 1 = 存在重复字符 function checkRepetition { # 允许1次重复(对应字符自身的位置) local rep=0 for (( j=0; j<$word_length; j++ )); do local char=${word:$j:1} log "对比字符串中位置 $j 的字符为: $char" if [ "$1" = "$char" ]; then let "rep++" fi if [ $rep -eq 2 ]; then echo "字符 '$char' 重复出现。" return 1 fi done return 0 } for (( i=0; i<$word_length; i++ )); do char_to_compare=${word:$i:1} log "待对比的位置 $i 的字符为: $char_to_compare" checkRepetition "$char_to_compare" if [ $? -eq 0 ]; then echo "当前单词暂时有效" let "char_count++" echo "检查下一个位置..." else echo "单词存在重复字符,无效" break fi done if [ $char_count -eq $word_length ]; then echo "单词有效。" echo "添加到文件中。" echo "$word" >> wordlist.txt fi
当前困境
目前无法让Crunch直接将生成的每个单词传递给上述脚本进行处理,必须先将Crunch的输出保存到文件后再处理,求可行的解决方案。
内容的提问来源于stack exchange,提问作者Infofly
相关产品推荐
相关产品推荐

