我使用CryptoJS加密我epub (or zip)
文件和解密。 我使用的react native
创建的应用程序。 但我不知道为什么解密的文件不是原来的EPUB文件。 在打开解密EPUB文件中的错误是: Error in opening zip file.
而我使用的react-native-fetch-blob
文件读取和写入。
这里是我的代码:
加密
encrypt() {
// ENCRYPTION
RNFetchBlob.fs.readFile(`${RNFetchBlob.fs.dirs.DownloadDir}/startup.epub`, 'base64')
.then(result => {
console.log('startup.epub read data: ', result);
// Encrypt
const ciphertext = AES.encrypt(result, key);
// Write encrypted file
RNFetchBlob.fs.writeFile(RNFetchBlob.fs.dirs.DownloadDir + '/startup_enc.dat', ciphertext.toString(), 'base64')
.then(() => {
console.log('startup_enc.dat file wrtten');
this.decrypt();
})
.catch(error => {
console.log('startup_enc.dat file writing error', error);
});
})
.catch(err => {
console.log('read error: ', err);
});
}
我读了EPUB文件
base64
格式。 我加密的结果与AES作为ciphertext
然后我写ciphertext.toString()
到startup_enc.dat
在文件base64
编码。
解密
decrypt() {
// DECRYPTION
RNFetchBlob.fs.readFile(`${RNFetchBlob.fs.dirs.DownloadDir}/startup_enc.dat`, 'base64')
.then(result => {
console.log('startup_enc.dat data: ', result);
// Decrypt
const bytes = AES.decrypt(result, key);
const plaintext = bytes.toString(enc.Base64);
// Write decrypted file
RNFetchBlob.fs.writeFile(RNFetchBlob.fs.dirs.DownloadDir + '/startup_dec.epub', plaintext, 'base64')
.then(() => {
console.log('startup_dec.epub file wrtten');
})
.catch(error => {
console.log('startup_dec.epub file writing error', error);
});
})
.catch(err => {
console.log('read error: ', err);
});
}
然后我读了加密
startup_enc.dat
文件base64
编码。 我解密的文件,并转换为base64
格式。 然后,我写的解密plaintext
到startup_dec.epub
再次base64
编码格式。
原始的epub文件的大小是2.49 MB
,加密文件是3.11 MB
和解密的epub的文件也是3.11 MB
不像2.49 MB
。
我无法找到问题的所在,无论是在encryption
或decryption
过程。 任何人都可以帮忙吗?
- 反应原生取入BLOB文件流媒体DOCS
- CryptoJS AES加密DOCS