字节数组到wav文件
byte array to wav file
编辑:谢谢大家!问题是我们必须逐块解密并保存原始文件格式。
我正在尝试按 16 字节大小的块加密声音文件。然后再解密回来,输出解密后的文件。
它向我尝试保存的解密文件抛出“格式不受支持的流”异常的问题。
public class Main {
public static void main(String[] args)
throws InvalidKeyException, UnsupportedAudioFileException, IOException, LineUnavailableException {
File decryptedFile = new File("dec.wav");
File soundFile = new File("C:\Users\Daniel\Desktop\FROG1\peeper5sec.wav");
String k = "KEY";
byte[] key = k.getBytes();
Object keyKey=frog_Algorithm.makeKey(key);
AudioInputStream st = AudioSystem.getAudioInputStream(soundFile);
byte[][] fileInByte = split(st.readAllBytes(),16);
if (fileInByte == null)
fileInByte[0] = st.readAllBytes();
byte enc[]=null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
for (int i = 0; i < fileInByte.length; i++) {
byte tmp3[]=frog_Algorithm.blockEncrypt(fileInByte[i], 0, keyKey);
outputStream.write(tmp3);
}
enc=outputStream.toByteArray();
FileOutputStream fos=new FileOutputStream(decryptedFile.getAbsolutePath());
//fos.AudioSystem.write(frog_Algorithm.blockDecrypt(enc, 0,keyKey));
//fos.close();
byte[] dec=frog_Algorithm.blockDecrypt(enc, 0,keyKey);
for (int i = 0; i < dec.length; i++) {
fos.write(dec[i]);
}
ByteArrayInputStream bais = new ByteArrayInputStream(dec);
AudioInputStream stream = AudioSystem.getAudioInputStream(bais);
AudioSystem.write(stream, getAudioFileFormat(stream), decryptedFile);
帮忙?
- 创建单独的方法:一种加载音频,一种加密,一种解密,一种播放音频。
- 创建单元测试,以便验证加密和解密(解密后的值必须与加密前的值相同)
- 您可能已经有了加载和播放音频的工作代码
- 将所有四个方法调用放入您的测试应用程序中,看看它是否仍然可以播放声音
这不会解决您的问题,但会为您提供一种结构化且可维护的方法。很可能您的加密与解密不匹配。
您可能想用 Apache commons-crypto 替换您的加密工作。
查看 encryption/decryption of byte array. But since you want to stream the results, it may be even better to look at encryption/decryption of byte stream.
的示例
编辑:谢谢大家!问题是我们必须逐块解密并保存原始文件格式。
我正在尝试按 16 字节大小的块加密声音文件。然后再解密回来,输出解密后的文件。 它向我尝试保存的解密文件抛出“格式不受支持的流”异常的问题。
public class Main {
public static void main(String[] args)
throws InvalidKeyException, UnsupportedAudioFileException, IOException, LineUnavailableException {
File decryptedFile = new File("dec.wav");
File soundFile = new File("C:\Users\Daniel\Desktop\FROG1\peeper5sec.wav");
String k = "KEY";
byte[] key = k.getBytes();
Object keyKey=frog_Algorithm.makeKey(key);
AudioInputStream st = AudioSystem.getAudioInputStream(soundFile);
byte[][] fileInByte = split(st.readAllBytes(),16);
if (fileInByte == null)
fileInByte[0] = st.readAllBytes();
byte enc[]=null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
for (int i = 0; i < fileInByte.length; i++) {
byte tmp3[]=frog_Algorithm.blockEncrypt(fileInByte[i], 0, keyKey);
outputStream.write(tmp3);
}
enc=outputStream.toByteArray();
FileOutputStream fos=new FileOutputStream(decryptedFile.getAbsolutePath());
//fos.AudioSystem.write(frog_Algorithm.blockDecrypt(enc, 0,keyKey));
//fos.close();
byte[] dec=frog_Algorithm.blockDecrypt(enc, 0,keyKey);
for (int i = 0; i < dec.length; i++) {
fos.write(dec[i]);
}
ByteArrayInputStream bais = new ByteArrayInputStream(dec);
AudioInputStream stream = AudioSystem.getAudioInputStream(bais);
AudioSystem.write(stream, getAudioFileFormat(stream), decryptedFile);
帮忙?
- 创建单独的方法:一种加载音频,一种加密,一种解密,一种播放音频。
- 创建单元测试,以便验证加密和解密(解密后的值必须与加密前的值相同)
- 您可能已经有了加载和播放音频的工作代码
- 将所有四个方法调用放入您的测试应用程序中,看看它是否仍然可以播放声音
这不会解决您的问题,但会为您提供一种结构化且可维护的方法。很可能您的加密与解密不匹配。
您可能想用 Apache commons-crypto 替换您的加密工作。 查看 encryption/decryption of byte array. But since you want to stream the results, it may be even better to look at encryption/decryption of byte stream.
的示例