首页 > 解决方案 > 创建一个加密的 voip 应用程序

问题描述

我实现了一个使用 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 run GRAVE: null javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 8000.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian 不支持。在 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) at chat.VOIPClientEC$1VOIPParleur.run(VOIPClient.java:759)

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

标签: java

解决方案


推荐阅读