>source

Deno부터 시작하여 바이너리 파일 체크섬을 계산하는 방법을 알아 내려고합니다. 문제는 표준 라이브러리의 해시 모듈에서 제공하는 메서드가 아니라 파일 스트리밍 방법 및/또는 hash.update 메서드를 제공하는 청크 유형에있는 것 같습니다. 파일 열기 및 청크 유형과 관련된 몇 가지 대안을 시도했지만 성공하지 못했습니다. 간단한 예는 다음과 같습니다.

import {createHash} from "https://deno.land/[email protected]/hash/mod.ts";
const file= new File(["my_big_folder.tar.gz"], "./my_big_folder.tar.gz");
const iterator = file.stream() .getIterator();
const hash = createHash("md5");
for await( let chunk of iterator){
   hash.update(chunk);
}
console.log(hash.toString()); //b35edd0be7acc21cae8490a17c545928

이 코드는 오류없이 컴파일되고 실행됩니다. 결과가 노드에서 제공하는 암호화 모듈과 Linux coreutils에서 제공하는 md5sum의 기능을 실행하는 것과 다른 점이 아쉽습니다. 어떠한 제안 ?

nodejs 코드 :

const crypto = require('crypto');
const fs = require('fs');
const hash = crypto.createHash('md5');
const file = './my_big_folder.tar.gz';
const stream = fs.ReadStream(file);
stream.on('data', data=> { hash.update(data); });
stream.on('end', ()=> {
  console.log(hash.digest('hex')); //c18f5eac67656328f7c4ec5d0ef5b96f
});

bash에서 동일한 결과 :

$ md5sum ./my_big_folder.tar.gz
$ c18f5eac67656328f7c4ec5d0ef5b96f ./my_big_folder.tar.gz

Windows 10에서는 다음을 사용할 수 있습니다.

CertUtil -hashfile ./my_big_folder.tar.gz md5

  • 답변 # 1

    File API는 Deno에서 파일을 읽는 데 사용되지 않습니다. 그렇게하려면 Deno.open API를 사용하고 다음과 같이 반복 가능하게 만들어야합니다.

    import {createHash} from "https://deno.land/[email protected]/hash/mod.ts";
    const hash = createHash("md5");
    const file = await Deno.open(new URL(
      "./BigFile.tar.gz",
      import.meta.url, //This is needed cause JavaScript paths are relative to main script not current file
    ));
    for await (const chunk of Deno.iter(file)) {
      hash.update(chunk);
    }
    console.log(hash.toString());
    file.close();
    
    

  • 이전 html에서 자바 스크립트 함수를 무작위로 반복하는 방법
  • 다음 flask - 해결 - google cloud platform 함수에서 cors python 사용