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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

问题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 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
分享
微博
QQ
微信
回复
2024-09-09 17:04:07
相关问题
HarmonyOS 文件md5计算问题
771浏览 • 1回复 待解决
HarmonyOS 如何计算文件md5
1462浏览 • 1回复 待解决
如何ArrayBuffer字节流进行MD5
849浏览 • 1回复 待解决
如何字符串进行MD5哈希处理
3542浏览 • 1回复 待解决
HarmonyOS md5进行加密
765浏览 • 1回复 待解决
HarmonyOS 字符串进行md5加密的demo
653浏览 • 1回复 待解决
HarmonyOS 密码怎么进行MD5加密
731浏览 • 1回复 待解决
如何一个文件进行读写操作
1342浏览 • 1回复 待解决
HarmonyOS 关于求文件md5
804浏览 • 1回复 待解决
HarmonyOS一个字符串MD5的demo
619浏览 • 1回复 待解决
HarmonyOS 消息认证码计算是否支持MD5
555浏览 • 1回复 待解决
HarmonyOS MD5实现
843浏览 • 1回复 待解决
HarmonyOS MD5签名
890浏览 • 1回复 待解决
HarmonyOS 字节数组进行MD5加密
768浏览 • 1回复 待解决
HarmonyOS MD5加密示例
889浏览 • 1回复 待解决
dlopen打开.so文件并使用md5加密
1389浏览 • 1回复 待解决
HarmonyOS MD5加密相关demo
1108浏览 • 1回复 待解决
想了解MD5算法示例。
1592浏览 • 1回复 待解决
HarmonyOS 关于MD5算法的问题
762浏览 • 1回复 待解决
HarmonyOS 咨询下p12文件md5
694浏览 • 1回复 待解决