5

私はJAVAで私の最終年度のプロジェクトに取り組んでいます

1) 画像内のテキストを隠す

2)画像の中の画像

3)音声ファイル (WAVE) 内のテキスト

私は 1) と 2) を正常に完了し、必要な場合はソース コードを添付しました。私は 3 番目のファイルで問題を抱えています。つまり、オーディオ ファイルにデータを隠しています。Wave ファイルからオーディオ入力ストリームを作成し、そのデータをバイト配列に読み取りますが、多くのことが明確ではありません。読み取り中に、最初の 44 バイトがヘッダー バイトであると推測していますか? (ファイルが WAVE 形式であるため) またはヘッダーはまったくコピーされません。問題は....デコード時に、新しく作成されたオーディオファイルからデータをバイト配列で読み取る必要があります。そして、データが隠されているバイトを見つけることができません。

audioinputstream からバイト配列にデータを読み込むと正確に何が起こるか教えてもらえますか?つまり、実際にバイト配列に読み込まれるものを意味しますか?

File fileIn = new File("C:\\Users\\Rahul\\Desktop\\pro\\Don't Stay.wav");

AudioInputStream audioInputStream =

AudioSystem.getAudioInputStream(fileIn);

int avail= audioInputStream.available();

System.out.println("bytes available " +avail);

System.out.println(audioInputStream.markSupported());

int bytesPerFrame =

        audioInputStream.getFormat().getFrameSize();

      // Set an arbitrary buffer size of 1024 frames.

int numBytes = 1024 * bytesPerFrame;

byte[] audioBytes = new byte[numBytes];

audioInputStream.read(audioBytes);

byte btext[]=Stego_text("good morning!");

byte bcoded[]=steg.encoding(audioBytes,btext,0);



 byte[] stg= a.decode_text(audioBytes);

 String obtain= new String(stg);

        System.out.println(">>>"+ obtain); //the hidden message gets successfully displayed here





try {

   //

            AudioSystem.write(audioInputStream, Type.WAVE, new File("C:\\Users\\Rahul\\Desktop\\pro\\Don't Stay_restored.wav"));

        } catch (Exception e) {



            e.printStackTrace();

        }

        byte[] audioBytesNew = new byte[numBytes];

        audioInputStream.read(audioBytesNew);

        byte[] stg1= a.decode_text(audioBytesNew);

        String obtain1= new String(stg1);

        System.out.println(">>>"+ obtain1); //the hidden message does not get displayed 

編集直後にバイト配列をデコードすると、正常に動作し、隠しメッセージが表示されますが、再度バイト配列を作成し、そこに audioinputsream データを読み込んでから、そのバイト配列をデコードすると..動作しません。なぜだろう?私を助けてください。

4

1 に答える 1