使用CryptoJS在设备上加密/解密二进制内容

时间:2016-10-04 14:04:28

标签: javascript angularjs ionic-framework cryptojs

我正在开发一个Ionic应用程序,我需要加密/解密设备上的文件(ipad)。

用例是当用户将某些文件(docx,pdf等)标记为敏感文件时,它们会在设备上加密。每当用户需要查看任何这些文件时,它们都会被解密并显示给用户。

我使用CrytoJS加密/解密文件,并使用$ cordovaFile将文件读/写到设备。

以下是加密设备上文件的代码。从设备读取第一个未加密的文件,然后将其加密并保存回设备。

return $cordovaFile.readAsBinaryString($rootScope.dataDirectory, 'abc.docx')
.then(function (binaryData) {
  console.log('Files read, now encrypt them '+binaryData);
  var encryptedWordArray = CryptoJS.AES.encrypt(binaryData, '12345');
  return $cordovaFile.writeFile($rootScope.dataDirectory, 'abc.docx', encryptedWordArray.toString(), true)
})

这会在设备中创建加密文件,但此时我无法判断文件是否已正确生成,除非它不是空文件。在我的示例中,原始docx文件为13KB,但加密后为23KB。

现在,我正在使用相同的文件并试图解密它。

var decrypted = null;
return $cordovaFile.readAsBinaryString($rootScope.dataDirectory, 'abc.docx')
  .then(function(encryptedBinaryData) {
    console.log('Read encrypted file as a binary string '+encryptedBinaryData);

    var decryptedWordArray = CryptoJS.AES.decrypt(encryptedBinaryData, '12345');
    decrypted = decryptedWordArray.toString();
    return $cordovaFile.writeFile($rootScope.dataDirectory, 'abc.docx', decrypted, true)
  })
  .then(function(data) {
    console.log('Decrypted file written');
  })

这会在设备上生成34KB的文件。但是,当我尝试打开它时,我收到一条错误消息,指出文件已损坏。

我认为这个问题可能与处理多种格式有关。读取文件时,我们会获得二进制内容。然后CrytoJS提供一个WordArray,但在将其保存到设备之前,需要将其转换回String。

非常感谢任何帮助。

0 个答案:

没有答案