我的方法是加密mp3文件甚至加密后加密文件可以用任何MP3播放器播放(如果你听到的是垃圾,那就好吧!只玩)。所以我要将我的Mp3文件拆分为字节数组,然后用我使用的加密方法更改帧(根据Mp3文件结构)。
这是我用来获取字节的代码:
public class Audio {
public static void main(String[] args) throws FileNotFoundException, IOException {
File file = new File("test.wmv");
FileInputStream fis = new FileInputStream(file);
//System.out.println(file.exists() + "!!");
//InputStream in = resource.openStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
//Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
System.out.println("read " + readNum + " bytes,");
}
} catch (IOException ex) {
// Logger.getLogger(genJpeg.class.getName()).log(Level.SEVERE, null, ex);
}
byte[] bytes = bos.toByteArray();
byte temp ;
for(int i = 0 ; i < bytes.length ; i++)
{
System.out.println(bytes[i]);
}
//below is the different part
File someFile = new File("test2.wmv");
FileOutputStream fos = new FileOutputStream(someFile);
fos.write(bytes);
fos.flush();
fos.close();
}
这就是问题,我的加密和更改字节应该在框架部分中吗?据我所知,我们无法访问位,我们可以更改的文件的最小部分是字节。那么如何更改由位定义的帧?
我做了“google it”!我很困惑,如果有人能告诉我我会感激的方式。
答案 0 :(得分:0)
读取完整字节,提取位,例如对于最后3位使用b & ((1 << 3) - 1)
,前3位使用b & (((1 << 3) - 1) << (Byte.SIZE - 3))
。当然不适用于完整字节,除非先将它们转换为整数并在使用前将它们转换回字节。
从Java 7开始,您也可以简单地wrap a byte array in a BitSet
轻松访问各个位。
要加密位,请使用AES-CTR等流密码模式,而不是分组密码模式。流密码的最后一步只是一个XOR,非常适合加密位。它也不需要任何填充,但它确实需要唯一的IV(每个数据加密密钥)。文件名的哈希值可以提供,因为名称永远不会改变。