ハッシュポテトで有名な、ハッシュという言葉、技術用語では長いデータを要約する関数、ハッシュ関数やその結果の値、ハッシュ値として使われます。ダウンロードしたファイルに改竄が無いことを確認したり、電子署名で使ったりします。
「file2hash」src on GitHub
手元のファイルのハッシュ値を手軽に求めるアプリを作ってみました。かつてはMD5がよく使われていましたが、コンピューター速度やアルゴリズムの改善が進み、現在は非推奨です。上記で使っている、SHA-256やSHA-512は、現在主流のアルゴリズムSHA-2のバリエーションです。
エンジニアには馴染み深い16進法、Base16と、ちょっと短く人に優しいバイナリ表現Base32で表示しています。(参考、人に優しいバイナリ表現、間違いやすい文字を排除した Base32(ベース32))
「file2hash on GitHub」
Code for FUKUIで、ESモジュール化したライブラリが充実してきたので、組み合わせたツールはこのように簡単に作れます。
import { Base32 } from "https://code4fukui.github.io/Base32/Base32.js";
import { Base16 } from "https://code4fukui.github.io/Base16/Base16.js";
import { waitDropFiles } from "https://js.sabae.cc/waitDropFiles.js";
import { SHA512 } from "https://code4fukui.github.io/SHA512/SHA512.js"
import { SHA256 } from "https://code4fukui.github.io/SHA256/SHA256.js";
import { addComma } from "https://js.sabae.cc/addComma.js";
import { waitFileRead } from "https://js.sabae.cc/waitFileRead.js";
for (;;) {
const files = await waitDropFiles(document.body);
const file = files[0]; // ドロップできるファイルは1つだけ
const bin = await waitFileRead(file.file);
len.value = addComma(bin.length);
const hash = SHA512.digest(bin);
sha512_32.value = Base32.encode(hash);
sha512.value = Base16.encode(hash).toUpperCase();
const hash2 = await SHA256.digest(bin);
sha256_32.value = Base32.encode(hash2);
sha256.value = Base16.encode(hash2).toUpperCase();
}
どんどんつくろうちょっと便利!