Android文件缩短/截断

时间:2016-08-29 10:53:19

标签: android file encryption aes

我想在第一个字符中创建一个带有幻数的加密文件 如果我加密文件,一切都很顺利,但如果我先写下幻数,那么加密的部分就会缩短。

我使用.txt文件进行测试。

这是我的代码:

        FileInputStream fis= new FileInputStream(file)
        [...]
        //Write magic number
        fos.write("%AES".getBytes(),0,4);
        byte[] ivbytes = new byte[]{(byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g', (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n', (byte)'o', (byte)'p'};
        IvParameterSpec iv = new IvParameterSpec(ivbytes);
        while(pwd.length()<16) {
            pwd+="_";
        }
        SecretKeySpec sks = new SecretKeySpec(pwd.getBytes(), "AES");
        // Create cipher
        Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding");
        cipher.init(Cipher.ENCRYPT_MODE, sks,iv);
        // Wrap the output stream
        CipherOutputStream cos = new CipherOutputStream(fos, cipher);
        while((k = fis.read(d)) > 0)
        {
            cos.write(d, 0, k);
        }
        // Flush and close streams.
        cos.flush();
        cos.close();
        fis.close();
        [...]

这是十六进制内容missing byte

调试与4的偏移相同,但是当上次读取时,结果会被调整。

我尝试加密文件,然后使用带有幻数的第二个文件,后跟一个字节到字节的副本,但没有什么总是一样的。

用于调试我创建一个序列为“1234567890”的文本文件 我得到这两个十六进制 with and without magicNumber

一个返回正确的序列,另一个返回“0123456”

1 个答案:

答案 0 :(得分:0)

问题是fis.read(d)正在读取的数据缺少最后四个字节。

fis在哪里创建以及如何创建?在k循环中观看dwhile((k = fis.read(d)) > 0)。问题不在于它正在读取正确的输入加密。