素直にライブラリを使いましょう
npm install jssha
utils.mjs
import jsSHA from "jssha";
/**
* パスワードをSHA-256でハッシュ化する
* @param {string} password - ハッシュ化するパスワード
* @return {string} - ハッシュ値
*/
export function toHash(password) {
const shaObj = new jsSHA("SHA-256", "TEXT");
shaObj.update(password);
const result = shaObj.getHash("HEX")
return result;
}
console.log(toHash("たかし"));
// 出力 → 4db72cb639c9c8f8aa4e8fbdfd6228f5e4025a1260781d3499310a576cf75cbb
そもそもSHA256ってなに?
SHA256(Secure Hash Algorithm 256-bit)はハッシュ関数の一つで、ハッシュ関数とは何かしらの値を入れると、固定長のハッシュ値が出力されるものです。
ハッシュドポテトおいしいよね。ハッシュってめちゃくちゃって意味らしい。めちゃくちゃポテト。
ハッシュ関数の性質
最近ハッシュ関数について知ってちょっと勉強してるのですがその性質がとても興味深いんです!
入力が少しでも違うと全く違う値が出力される、そしてハッシュ値から元の値には戻せないという不可逆性。
アルゴリズムを紹介している記事を見ましたが全く理解できませんね
2の256乗「115,792,089,237,316,195,423,570,985,008,687,907,853,
269,984,665,640,564,039,457,584,007,913,129,639,936」という想像もつかない巨大な空間の中に入力された値を1点の座標にマッピングするイメージ...?
ハッシュ関数の使い道
主にパスワードを平文で保存しないためにハッシュ値に変換して保存する。
あとは、入力の違いを検出できるという性質を利用して元データに変更が加えられたかどうかも判別できますね!