TNTSuperMan
@TNTSuperMan (TNTSuperMan)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Javascriptで最も最適なMD5ハッシュのライブラリは?

今Javascriptで最も最適なMD5ハッシュのライブラリを探しています。
出来れば教えてほしいです。

経緯

Chrome拡張機能のコードの一部で、サイトのホスト(location.host)に応じて
処理を分岐するような仕組みを作りたいです。しかし、拡張機能のファイルに
そのホスト名を直接含めたくないので、MD5ハッシュを使って確認するように
しています。今は、Crypto-JSでやっているのですが、
AESなどどうもライブラリサイズの無駄が多い気がします。

今さっき見つけて、検討しているのはこちらのmd5.jsなんですが、他にいい物はないでしょうか。

"最適"の観点

優先順位順です。

  1. Node.js等無しで生のJavascriptが使える
  2. ライブラリがフリーライセンス(希望はMIT LicenseかApache License 2.0)
  3. ライブラリのサイズが小さい
  4. 速度が速い
  5. 使いやすい

環境

作っているのはChrome拡張機能です。
Node.jsなどの特殊な(?)ツールは使っていません。
実行環境はMicrosoft Edgeです。
開発環境はVisual Studio Codeです。

回答お願いします。

0

1Answer

ダイジェストを取得したいのであれば javascript 標準実装の
SubtleCrypto: digest()
でいいのでは?みたいなところありませんか?

ただし、 MD5 は bit数が少なく、脆弱性が指摘されている為、アルゴリズムは SHA-256 以上になりますが。

async function digestMessage(message, digestName = "SHA-256") {
    const encoder = new TextEncoder();
    const data = encoder.encode(message);
    const hashBuffer = await crypto.subtle.digest(digestName, data);
    const hashArray = Array.from(new Uint8Array(hashBuffer)); // バッファーをバイト列に変換する
    const hashHex = hashArray
        .map((b) => b.toString(16).padStart(2, "0"))
        .join(""); // バイト列を 16 進文字列に変換する
    return hashHex;
}

サンプル:

0Like

Comments

  1. @TNTSuperMan

    Questioner

    速度面が多少心配ですが、とてもよさそうです!
    ありがとうございました!

Your answer might help someone💌