You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bash脚本中逐行获取crunch输出以暴力破解加密multibit.key钱包

问题根源

你当前使用的for password in $(crunch ...)写法依赖Bash的命令替换机制,必须等crunch进程运行结束、把所有生成的密码全部加载到内存完成单词拆分后,才会开始遍历执行解密逻辑。GB级的输出会直接占满内存,导致进程被系统OOM杀掉。

解决方案

改用管道直接把crunch的标准输出实时逐行传给while循环处理,无需缓存全量生成的密码,生成一个密码就立刻尝试解密。

修改后的完整代码

#!/bin/bash
if [ $# -ne 1 ]; then
  echo "Usage: apply-guesses.sh [key file]"
  exit 1
fi
echo "Key file: $1"

# 管道实时传递crunch生成的密码,逐行处理
crunch 12 12 abcdefghjiklmnopqrstuvwxyz -t PASSWORD_BEGIN@@@@@ | while IFS= read -r password; do
   echo "------"
   echo "Attempting: $password..."
   # 2>/dev/null 隐藏openssl解密失败的报错信息,避免刷屏
   if openssl enc -d -p -aes-256-cbc -md md5 -a -in "$1" -out recovered.key -pass pass:"$password" 2>/dev/null; then
       echo "Success!"
       # 杀掉当前脚本启动的crunch进程,避免继续生成无用密码
       pkill -P $$ crunch
       break
     else
       echo "Failed"
       # 删除解密失败产生的无效残差文件
       rm -f recovered.key
   fi
   echo "------"
done

关键修改说明

  • 移除了命令替换$()的写法,改用管道对接crunch输出,完全没有全量内存缓存的开销
  • 用IFS= read -r password逐行读取密码:IFS=避免行首尾空白字符被截断,-r避免密码中的反斜杠被自动转义,保证读取到的密码和crunch生成的完全一致
  • 额外增加了失败后清理无效文件、成功后自动终止crunch进程的逻辑,不需要手动干预停止

内容的提问来源于stack exchange,提问作者Fnr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:39:00