我正在使用 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);
});
}
base64
我以格式阅读了 epub 文件。我用 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
在进行中。有人可以帮忙吗?