Android加密视频文件与Facebook隐藏库

时间:2016-07-08 07:07:27

标签: android facebook encryption

我想加密存储在SD卡中的视频文件

  

Environment.getExternalStorageDirectory()

我发现Facebook隐藏适用于加密大文件。我已经按照本教程Make fast cryptographic operations on Android with Conceal

进行了操作

这是我到目前为止所做的事情。

加密方法

  public void encodeAndSaveFile(File videoFile, String path) { 

    try {
        final byte[] encrypt = new byte[(int) videoFile.length()];
        ContextWrapper cw = new ContextWrapper(getApplicationContext());
        File directory = cw.getDir(path, Context.MODE_PRIVATE);
        File mypath = new File(directory, "en1");



        Crypto crypto = new Crypto(new SharedPrefsBackedKeyChain(this), new SystemNativeCryptoLibrary());

        if (!crypto.isAvailable()) {
            return;
        }

        OutputStream fileStream = new BufferedOutputStream(
                new FileOutputStream(mypath));
        OutputStream outputStream = crypto.getCipherOutputStream(
                fileStream, new Entity("Passwordd"));
        outputStream.write(encrypt);
        outputStream.close();
    } catch (UnsupportedOperationException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    Toast.makeText(WebViewActivity.this,"Encrypted",Toast.LENGTH_LONG).show();
}

解密方法

    private void decodeFile(String filename,String path) { 

    Crypto crypto = new Crypto(new SharedPrefsBackedKeyChain(this),
            new SystemNativeCryptoLibrary());

    ContextWrapper cw = new ContextWrapper(getApplicationContext());
   File directory = cw.getDir(path, Context.MODE_PRIVATE);
    File file = new File(directory, filename);

    try {
        FileInputStream fileStream = new FileInputStream(file);
        InputStream inputStream = crypto.getCipherInputStream(fileStream,
                new Entity("Password"));

        ByteArrayOutputStream out = new ByteArrayOutputStream();

        int read;
        byte[] buffer = new byte[1024];

        while ((read = inputStream.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }

        inputStream.close();


    } catch (Exception e) {
        e.printStackTrace();
    }
    Toast.makeText(WebViewActivity.this,"Decrypted",Toast.LENGTH_LONG).show();

}

但此代码在运行时抛出以下错误

  

java.lang.illegalArgumentException:文件包含路径分隔符

然后我改变了#path;我的路径:encodeAndSaveFile的变量到这个

 File mypath = new File(directory, "en1");

和"文件" decodeFile的变量到此

File file = new File(directory, filename);

然后没有错误。加密没有发生。请帮助解决此问题或建议使用隐藏库进行视频加密的正确方法。

0 个答案:

没有答案