HarmonyOS 文件解密(excel、ppt、doc、pdf、zip)

文件解密相关技术demo,包含excel、ppt、doc、pdf、zip文件

客户传递订货单信息时,需要用到文件加密解密相关技术

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

可以将文件转换成buferArray的数组,然后转成Base64的字符串,在使用加解密进行解密

但是这个方法只能用以HarmonyOS 本地的加解密,跨服务的话无法使用,因为其他系统使用的有符号数组-128=> 127 而HarmonyOS 是0 =>255

所以跨服使得字符数组所代表的意义不同无法转换还原

读取文件转换为buferArray的数组的代码demo实例如下

import { BusinessError } from '@ohos.base';
import buffer from '@ohos.buffer';
let filePath = pathDir + "/test.txt";
let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);
let arrayBuffer = new ArrayBuffer(4096);//指定长度的与arrayBuffer
//从文件读取数据buf
fs.read(file.fd, arrayBuffer, (err: BusinessError, readLen: number) => {
  if (err) {
    console.error("read failed with error message: " + err.message + ", error code: " + err.code);
  } else {
    console.info("read file data succeed");
    let buf = buffer.from(arrayBuffer, 0, readLen);
    console.info(`The content of file: ${buf.toString()}`);
  }
  fs.closeSync(file);
});

参考链接(读取文件fs.read):

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5#fsread

ArrayBuffer最大长度就是4096 对于一整个文件 没办法读取完整

可以在每次读取之后使用@ohos.buffer (Buffer)中的Buffer对象存储本次读取的值,在全部读取完成后使用buffer.concat()合并所有Buffer的内容 demo参考如下:

async readLocalFileWithStream() {
  try {
    // 存储每次读取的结果
    let buffers: buffer.Buffer[] = [];
    // 打开文件流
    let inputStream = fs.createStreamSync("文件沙箱路径", 'r+');
    // 以流的形式读取源文件内容
    let bufSize = 4096;
    let readSize = 0;
    let buf = new ArrayBuffer(bufSize);

    class Option {
      public offset: number = 0;
      public length: number = bufSize;
    }

    let option = new Option();
    option.offset = readSize;
    let readLen = await inputStream.read(buf, option);
    // 存储当前读取结果
    buffers.push(buffer.from(buf.slice(0, readLen)))
    readSize += readLen;
    while (readLen > 0) {
      option.offset = readSize;
      readLen = await inputStream.read(buf, option);
      // 存储当前读取结果
      buffers.push(buffer.from(buf.slice(0, readLen)))
      readSize += readLen;
    }
    // 关闭文件流
    inputStream.closeSync();
    // 合并内容
    let finalBuf: ArrayBuffer = buffer.concat(buffers).buffer
    console.info(`final ArrayBuffer byteLength is ${finalBuf.byteLength}}`)
  } catch (error) {
    let err = error as BusinessError;
    console.error(`readLocalFileWithStream failed, code is ${err.code},message is ${err.message}`);
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS excel文件如何打开
48浏览 • 1回复 待解决
HarmonyOS 如何解析zip文件
11浏览 • 1回复 待解决
HarmonyOS PDF文件预览
10浏览 • 1回复 待解决
HarmonyOS PDF文件保存
73浏览 • 1回复 待解决
HarmonyOS 浏览本地pdf文件 -
10浏览 • 1回复 待解决
HarmonyOS 怎么打开PDF文件
226浏览 • 1回复 待解决
HarmonyOS 代码如何解压zip文件
64浏览 • 1回复 待解决
HarmonyOS 文件管理查找pdf文件并上传
74浏览 • 1回复 待解决
HarmonyOS 是否支持pdf、Word文件预览?
371浏览 • 1回复 待解决