HarmonyOS如何对一个文件内容进行MD5计算

这样实现是否正确:

/** 
 * 获取单个文件的MD5值 
 */ 
public static async getFileMD5(filePath: string): Promise<string> { 
  let fState: fs.Stat = fs.statSync(filePath); 
  if (!fState.isFile()) { 
  return ""; 
} 
let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY); 
try { 
  let md = cryptoFramework.createMd('MD5'); 
  let arrayBuffer = new ArrayBuffer(1024); 
  let offset = 0; 
  let readLen = -1; 
  do { 
    readLen = fs.readSync(file.fd, arrayBuffer, { 
      offset: offset,// 表示期望读取文件的位置。可选,默认从当前位置开始读。 
      length: 1024 // 表示期望读取数据的长度。可选,默认缓冲区长度。 
    }) 
    if (readLen > 0) { 
      offset += readLen; 
      let buf = buffer.from(arrayBuffer, 0, readLen).buffer; 
      let updateMessageBlob: cryptoFramework.DataBlob = { data: new Uint8Array(buf) }; 
      await md.update(updateMessageBlob); 
    } 
  } while (readLen > 0) 
  let mdOutput = await md.digest(); 
  return StringUtils.uint8ArrayToHexStr(mdOutput.data); 
} catch (e) { 
  return ""; 
} finally { 
  fs.closeSync(file); 
} 
}

问题1:在while循环中调用fs.readSync,其offset该怎么设值?

问题2:循环结束的判断条件readLen > 0是否正确?

HarmonyOS
2024-09-09 11:20:59
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

计算文件MD5可以使用hash.hash,只计算文件内容https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-hash-V5#hashhash

上述代码中:

问题1:offset做累加。

问题2:循环结束的判断条件readLen > 0正确。参考代码:

let buffer = new ArrayBuffer(1024 * 1024) 
let readLength = 0 
let readTotalLength = 0 
let length =srcFd.length 
while ((readLength = await fs.read(srcFd.fd, buffer, { offset: srcFd.offset + readTotalLength, length:length > buffer.byteLength? 1024 * 1024 :length })) > 0) { 
  readTotalLength += readLength 
  await fs.write(destFile.fd, buffer, { length: readLength }) 
  length-=buffer.byteLength 
}
分享
微博
QQ
微信
回复
2024-09-09 17:04:07
相关问题
HarmonyOS 如何计算文件md5
574浏览 • 1回复 待解决
如何ArrayBuffer字节流进行MD5
147浏览 • 1回复 待解决
如何字符串进行MD5哈希处理
2577浏览 • 1回复 待解决
如何一个文件进行读写操作
419浏览 • 1回复 待解决
HarmonyOS MD5加密相关demo
430浏览 • 1回复 待解决
dlopen打开.so文件并使用md5加密
706浏览 • 1回复 待解决
想了解MD5算法示例。
748浏览 • 1回复 待解决
HarmonyOS 如何获取媒体资源的md5信息
650浏览 • 1回复 待解决
求告知ArkTS如何获取MD5
620浏览 • 0回复 待解决
HarmonyOS 如何md5变成字符串?
223浏览 • 1回复 待解决
MD5加密后解码结果乱码
109浏览 • 1回复 待解决
如何通过uuid生成、md5、RSA、AES、 DES
1852浏览 • 1回复 待解决
HarmonyOS 请问有提供md5算法库吗?
151浏览 • 1回复 待解决
如何解决MD5加密中遇到的问题
835浏览 • 1回复 待解决
没有找到相应的MD5算法实现
618浏览 • 1回复 待解决