Web Crypto APIのSubtleCrypto.digest()を使ってハッシュ値を計算できる。
引数にはアルゴリズムと、対象となるArrayBufferもしくはArrayBufferViewを渡す。
ArrayBufferはFileオブジェクトのarrayBuffer()メソッドから取得できる。
- https://developer.mozilla.org/ja/docs/Web/API/File
- https://developer.mozilla.org/ja/docs/Web/API/Blob/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);
});
});
}
});