我实现了使用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)