CryptoJS AES解密不放弃原来的ZIP / EPUB文件中的原始反应(CryptoJS AE

2019-09-28 18:16发布

我使用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格式。 然后,我写的解密plaintextstartup_dec.epub再次base64编码格式。

原始的epub文件的大小是2.49 MB ,加密文件是3.11 MB和解密的epub的文件也是3.11 MB不像2.49 MB

我无法找到问题的所在,无论是在encryptiondecryption过程。 任何人都可以帮忙吗?

  1. 反应原生取入BLOB文件流媒体DOCS
  2. CryptoJS AES加密DOCS
文章来源: CryptoJS AES Decryption Not Giving original ZIP/EPUB file in react native