メモ置き場

ファイルのハッシュ値の計算

Web Crypto APIのSubtleCrypto.digest()を使ってハッシュ値を計算できる。

引数にはアルゴリズムと、対象となるArrayBufferもしくはArrayBufferViewを渡す。

ArrayBufferはFileオブジェクトのarrayBuffer()メソッドから取得できる。

<html>
  <body>
    <input type="file" id="file-input">
    <script src="main.js"></script>
  </body>
</html>
document.querySelector('#file-input').addEventListener('change', e=>{
  const digestType = ['SHA-1', 'SHA-256', 'SHA-384', 'SHA-512'];
  let files = e.target.files;
  for (let i=0; i<files.length; i++){
    files[i]
    .arrayBuffer()
    .then(buffer=>
      Promise.all(digestType.map(d=>window.crypto.subtle.digest(d, buffer)))
    )
    .then(ds=>{
      ds.map((d,i)=>{
        const view = new Uint8Array(d);
        const array = Array.from(view);
        const result = array.map(b=>b.toString(16).padStart(2, '0')).join('');
        console.log(digestType[i]+":"+result);
      });
    });
  }
});