Я классифицировал данные в моей SD-карте. Есть ли способ предоставить доступ к SD-карте только через приложение ( реагировать-родной-проект )? Вовлеченный файл - .mp4 файлы.
Большинство решений, которые я нашел, касалось шифрования данных на SD-карте с использованием AES-Encryption. Но я имею дело с большими файлами, поэтому расшифровка всего файла сразу выдаст memory out exception
.
Во-вторых, чтение всего потока данных за потоком возможно, когда я протестировал этот метод, первый набор потока (зашифрованный) будет успешно расшифрован. Следующий поток приведет к ошибке Malformed UTF-8 data
.
В-третьих, я попытался разделить файл на части, расшифровать каждый фрагмент и добавить каждый из них, чтобы получить ожидаемый файл. Я получаю проблемы, как указано здесь Описание проблемы .
EDIT:
Пакет, используемый для шифрования: simple-crypto-js ,
Функция расшифровки файла за потоком:
decryptfile() {
RNFetchBlob.fs
.readStream(
RNFetchBlob.fs.dirs.DCIMDir + "/encrypted.dat",
"base64",
4194303,
30000 // 30 seconds buffer time before next stream comes
)
.then(stream => {
let data = "";
stream.open();
stream.onData(chunk => {
data += chunk;
var decipherText = simpleCrypto.decrypt(chunk.toString());// First set of chunk will get successfully decrypted, the next chunk will result to Malformed UTF-8 data error
this.writeOriginal(decipherText);
});
stream.onEnd(() => {
console.log(data);
});
});
}
Функция для добавления данных:
writeOriginal(decipherText) {
RNFetchBlob.fs
.appendFile(
RNFetchBlob.fs.dirs.DCIMDir + "/encrypt.mp4",
decipherText,
"base64"
)
.then(() => {
console.log("File Written");
})
.catch(error => {
console.log("file writing error", error);
});
}
Это приложение для обучения в автономном режиме, где видео хранятся на SD-карте и доступны в приложении.