更改Mp3文件字节

时间:2014-01-12 14:58:27

标签: java file encryption mp3 byte

我的方法是加密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”!我很困惑,如果有人能告诉我我会感激的方式。

1 个答案:

答案 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(每个数据加密密钥)。文件名的哈希值可以提供,因为名称永远不会改变。