1

我正在使用 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.epubbase64

原始epub文件的大小是2.49 MB,加密文件是3.11 MB,解密后的epub文件也是不3.11 MB一样2.49 MB的。

我无法找到问题出在哪里,无论是在encryption还是decryption在进行中。有人可以帮忙吗?

  1. React-native-fetch-blob 文件流式传输DOCS
  2. CryptoJS AES 加密文档
4

0 回答 0