長い答え

長い答え
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

不明なファイル形式の場合は、単にdataTryと表示されます。

$ file out.txt | grep '^out.txt: data$'

ファイルに実際にランダムなバイナリが含まれていることを確認してください。したがって、ガベージである可能性が高いです。

UTF-8でエンコードされたテキストファイルであることを確認するには、次のものを使用することもout.txtできますiconv

$ iconv -f utf-8 -t utf-16 out.txt >/dev/null

おすすめ記事