if grep -q "�" out.txt
then
echo "working"
else
cat out.txt
fi
デフォルトでは、「out.txt」ファイルにファイルの任意の場所に「�」が含まれている場合は「WORK」をエコーし、「out.txt」ファイルにファイルのどこにも「�」が含まれていない場合欲しいです。猫を追い出す。txt
編集:これが私がすることです。無差別代入OpenSSLの復号を試みています。
openssl encは成功した場合は0を返し、それ以外の場合は0以外の値を返します。注:AES / CBCは正しいパディングに基づいて「暗号解読が有効かどうか」のみを確認できるため、誤検出が発生します。したがって、ファイルは復号化されますが、正しいパスワードではないため、横説説が含まれます。歪んだ文字の一般的な文字は「�」です。したがって、出力に「�」が含まれている場合は、doループを続行したいと思います。
これは私の子リンクですhttps://github.com/Raphaeangelo/OpenSSLCracker これはスクリプトです。
while read line
do
openssl aes-256-cbc -d -a -in $1 -pass pass:$line -out out.txt 2>out.txt >/dev/null && printf "==================================================\n"
if grep -q "�" out.txt
then
:
else
cat out.txt &&
printf "\n==================================================" &&
printfn"\npassword is $line\n" &&
read -p "press return key to continue..." < /dev/tty;
fi
done < ./password.txt
それでも、文字を含む出力が表示されます。
ベストアンサー1
grep
作業に適したツールではありません。
あなたはそれを見たU+FFFD REPLACEMENT CHARACTER
これは、ファイルの内容に実際に存在するのではなく、テキストベースの入力のみを処理するツールを使用してバイナリファイルを表示しているためです。無効な入力(たとえば、任意のバイナリデータ)を処理する標準的な方法は、画面に入る前に現在のロケール(ほとんどUTF-8)で無効なすべての項目をU + FFFDに置き換えることです。
\xEF\xBF\xBD
これは、リテラル(U + FFFD文字のUTF-8バイトシーケンス)がファイルに表示されない可能性が高いことを意味します。grep
いいえと言うのは絶対に正しいです。
ファイルに不明なバイナリが含まれているかどうかを検出する1つの方法は、次のfile(1)
コマンドを使用することです。
$ head -c 100 /dev/urandom > rubbish.bin
$ file rubbish.bin
rubbish.bin: data
不明なファイル形式の場合は、単にdata
Tryと表示されます。
$ file out.txt | grep '^out.txt: data$'
ファイルに実際にランダムなバイナリが含まれていることを確認してください。したがって、ガベージである可能性が高いです。
UTF-8でエンコードされたテキストファイルであることを確認するには、次のものを使用することもout.txt
できますiconv
。
$ iconv -f utf-8 -t utf-16 out.txt >/dev/null