Shell脚本中OpenSSL执行报错,请求协助排查解决
解决openssl enc报错"enc: Use -help for summary."的问题
你的脚本报错核心是openssl enc参数组合错误,加上echo默认添加换行符导致编码/解码异常,以下是具体修复步骤:
1. 修正Base64编码/解码的换行问题
echo默认会在输出末尾加换行符,这会让Base64编码/解码结果混入多余字符,破坏后续解密流程:
- 生成salt的循环中,把
echo "$var"改为echo -n "$var"(-n表示不添加换行):for i in {1..28} do var=$(echo -n "$var" | base64) done - 在decrypt函数中处理解密输入时,同样用
echo -n避免多余换行:flag=$(echo -n "$MzSaas7k" | base64 -d | openssl enc -aes-128-cbc -d -salt -pass pass:"$salt")
2. 调整openssl enc的参数
你已经通过base64 -d完成了解码,传给openssl的是二进制数据,不需要再用-a参数(-a是用于告诉openssl输入/输出为Base64格式),直接去掉-a即可:
原错误命令:
flag=$(echo $MzSaas7k | base64 -d | openssl enc -aes-128-cbc -a -d -salt -pass pass:$salt)
修改后:
flag=$(echo -n "$MzSaas7k" | base64 -d | openssl enc -aes-128-cbc -d -salt -pass pass:"$salt")
3. 可选:添加错误检查
可以给openssl命令增加状态码检查,方便快速定位解密失败的具体原因:
flag=$(echo -n "$MzSaas7k" | base64 -d | openssl enc -aes-128-cbc -d -salt -pass pass:"$salt" 2>&1) if [ $? -ne 0 ]; then echo "解密失败: $flag" exit 1 fi
完整修复后的脚本
#!/bin/bash function decrypt { MzSaas7k=$(echo "$hash" | sed 's/988sn1/83unasa/g') Mzns7293sk=$(echo "$MzSaas7k" | sed 's/4d298d/9999/g') MzSaas7k=$(echo "$Mzns7293sk" | sed 's/3i8dqos82/873h4d/g') Mzns7293sk=$(echo "$MzSaas7k" | sed 's/4n9Ls/20X/g') MzSaas7k=$(echo "$Mzns7293sk" | sed 's/912oijs01/i7gg/g') Mzns7293sk=$(echo "$MzSaas7k" | sed 's/k32jx0aa/n391s/g') MzSaas7k=$(echo "$Mzns7293sk" | sed 's/nI72n/YzF1/g') Mzns7293sk=$(echo "$MzSaas7k" | sed 's/82ns71n/2d49/g') MzSaas7k=$(echo "$Mzns7293sk" | sed 's/JGcms1a/zIm12/g') Mzns7293sk=$(echo "$MzSaas7k" | sed 's/MS9/4SIs/g') MzSaas7k=$(echo "$Mzns7293sk" | sed 's/Ymxj00Ims/Uso18/g') Mzns7293sk=$(echo "$MzSaas7k" | sed 's/sSi8Lm/Mit/g') MzSaas7k=$(echo "$Mzns7293sk" | sed 's/9su2n/43n92ka/g') Mzns7293sk=$(echo "$MzSaas7k" | sed 's/ggf3iunds/dn3i8/g') MzSaas7k=$(echo "$Mzns7293sk" | sed 's/uBz/TT0K/g') flag=$(echo -n "$MzSaas7k" | base64 -d | openssl enc -aes-128-cbc -d -salt -pass pass:"$salt") if [ $? -ne 0 ]; then echo "解密失败: $flag" exit 1 fi } var="9M" salt="" hash="VTJGc2RHVmtYMTl2ZnYyNTdUeERVRnBtQWVGNmFWWVUySG1wTXNmRi9rQT0K" for i in {1..28} do var=$(echo -n "$var" | base64) done salt="$var" if [[ ! -z "$salt" ]] then decrypt echo "$flag" else exit 1 fi
内容的提问来源于stack exchange,提问作者n00bdev
相关产品推荐
相关产品推荐

