创建一个加密的voip应用程序

时间:2019-04-29 12:45:55

标签: java

我实现了使用AES和RC4算法加密的voip应用程序,然后在我执行该应用程序并使用这两种算法加密语音时,它可以正常工作,但是当我添加算法ECC时,它首次工作并在显示后这个错误,然后这些算法都不起作用 这是我执行语音传输并使用ECC加密的一些代码

   public VOIPClientEC(String ip, int port) {
        this.ip = ip;
        this.port = port;
        try {
            client = new Socket(ip, port);

            this.start();
        } catch (Exception e) {
        }
    }

    public VOIPClientEC(Socket s) {
        client = s;

        this.start();
    }

    public void run() {

        try {
            //long t = System.currentTimeMillis();
            OutputStream o = client.getOutputStream();
            DataOutputStream dos = new DataOutputStream(o);
            //dos.writeLong(t);
            InputStream inp = client.getInputStream();
            DataInputStream dis = new DataInputStream(inp);
          //  long time = dis.readLong();
            EllipticCurveAlgorithm algorithm = new EllipticCurveAlgorithm();
            PointProccessor processor = new PointProccessor();
            long pri = 1234567891;
            Point pub = processor.multiply(pri, algorithm.base);
            ObjectOutputStream os = new ObjectOutputStream(o);
            os.writeObject(pub.getX());
            os.writeObject(pub.getY());
            ObjectInputStream ois = new ObjectInputStream(inp);
            Object px = ois.readObject();
            System.out.println(px);
            Object py = ois.readObject();
            System.out.println(py);
            Point p = new Point((long)px, (long)py);
            inp = null;
            dos = null;
            dis = null;
            class VOIPEcouteur extends Thread {

                private BufferedInputStream buffis = null;
                private InputStream is = null;

                private byte[] data;
                private int count,
                         cE;

                private AudioFormat audio = null;
                private SourceDataLine ligneSource = null;

                private AudioInputStream audiois = null;

                public VOIPEcouteur() {
                    try {

                        buffis = new BufferedInputStream(client.getInputStream());
                        //configuration Audio
                        audio = confAudio();
                    } catch (IOException ex) {
                    }

                }

                public void run() {

                    data = new byte[VOIP_BUFFER];
                    try {

                        while ((count = buffis.read(data, 0, data.length)) !=
                                -1 && !boolStopTalking) {

                            is = new ByteArrayInputStream(data);

                            audiois = new AudioInputStream(is, audio,
                                    data.length / audio.getFrameSize());

                            DataLine.Info dataLineInfo = new DataLine.Info(
                                    SourceDataLine.class, audio);

                            ligneSource = (SourceDataLine) AudioSystem.getLine(
                                    dataLineInfo);

                            ligneSource.open(audio);
                            ligneSource.start();

                            while ((count = audiois.read(data, 0, data.length)) !=
                                    -1) {

                                if (count > 0) {
                                   byte[] s = algorithm.decrypt(data, pri);
                                    ligneSource.write(s, 0, s.length);
                                    cE++;
                                   /* if (cE == 1){       
                                        tc3 = System.currentTimeMillis()-time;
                                        System.out.println("temp d'execution EC : "+tc3); 
                                    }*/
                                }
                            }
                        }


                       // ligneSource.flush();
                        ligneSource.drain();
                        ligneSource.stop();
                        ligneSource.close();
                        client.close();
                    } catch (IOException | LineUnavailableException ex) {
                    }
                }
            }

            class VOIPParleur extends Thread {
                private BufferedOutputStream buffos = null;                    
                private TargetDataLine ligneCible = null;
                private AudioFormat audio = null;
                private byte[] data;
                private int count;

                public VOIPParleur() {
                    try {
                        buffos = new BufferedOutputStream(client.
                                getOutputStream());

                        audio = confAudio();

                    } catch (IOException ex) {
                    }

                }

                public void run() {
                    try {
                        DataLine.Info dataLineInfo = new DataLine.Info(
                                TargetDataLine.class, audio);


                        ligneCible = (TargetDataLine) AudioSystem.getLine(
                                dataLineInfo);



                        ligneCible.open(audio);


                        ligneCible.start();
                        data = new byte[VOIP_BUFFER];
                        boolStopTalking = false;

                        try {

                            while (!boolStopTalking) {

                                count = ligneCible.read(data, 0, data.length);
                                if (count > 0) {
                                   byte [] s = algorithm.encrypt(data, p);
                                   buffos.write(s, 0, data.length);
                                }
                            }

                            buffos.close();
                            ligneCible.stop();
                            ligneCible.close();

                            client.close();
                        } catch (Exception e) {
                        }
                    } catch (LineUnavailableException ex) {
                        Logger.getLogger(VOIPClientEC.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }

            new VOIPParleur().start();
            new VOIPEcouteur().start();

        } catch (IOException | ClassNotFoundException ex) {
            Logger.getLogger(VOIPClientEC.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private AudioFormat confAudio() {
        //configuration copi�e

        //8000,11025,16000,22050,44100
        float sampleRate = 8000.0F;
        //8,16
        int sampleSizeInBits = 16;
        //1,2
        int channels = 2;
        boolean signed = true;
        boolean bigEndian = false;

        return new AudioFormat(sampleRate, sampleSizeInBits,
                               channels, signed,
                               bigEndian);
    }
}

那是错误

  

chat.VOIPClientEC $ 1VOIPParleur运行GRAVE:null   javax.sound.sampled.LineUnavailableException:格式行   PCM_SIGNED 8000.0 Hz,16位,立体声,4字节/帧,非低位优先   支持的。在   com.sun.media.sound.DirectAudioDevice $ DirectDL.implOpen(DirectAudioDevice.java:513)     在   com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:121)     在   com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:153)     在chat.VOIPClientEC $ 1VOIPParleur.run(VOIPClient.java:759)

     

线程“ Thread-15”中的异常java.lang.NullPointerException在   chat.VOIPClientEC $ 1VOIPEcouteur.run(VOIPClient.java:720)

0 个答案:

没有答案