LoginSignup
33
15

More than 3 years have passed since last update.

Google Spreadsheetでハッシュ関数を使う

Posted at

やりたいこと

  • Google SpreadsheetでMD5やSHA256などのハッシュ関数を使う

方針

基本的にこのStackoverflowの質問(Hash of a cell text in Google Spreadsheet)に従ってやれば良いのだが、非ASCIIの文字列で少しつまずいたので日本人としてメモ。

実装

ハッシュ関数を使いたいシートで、シート>スクリプトエディタを開く。
スクリプトエディタに下記の関数を貼り付けて保存。

function MD5(input) {
  var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, input, Utilities.Charset.UTF_8);
  var txtHash = '';
  for (i = 0; i < rawHash.length; i++) {
    var hashVal = rawHash[i];
    if (hashVal < 0) {
      hashVal += 256;
    }
    if (hashVal.toString(16).length == 1) {
      txtHash += '0';
    }
    txtHash += hashVal.toString(16);
  }
  return txtHash;
}

付け加えたのは第3引数のUtilities.Charset.UTF_8で、これがないと非ASCII文字は全部同じ文字として扱われてしまう。

hashVal += 256しているのはUtilities.computeDigest関数が-128から127までの数値を要素に持つbyte arrayを返すので、マイナスでなくするために足しています。マイナスのままhashVal.toString(16)してしまうと値に-がついてしまう(例:-30.0 -> -1e)からで、別に256でなく128を足すのでも良いようです。
試しにPythonのhashlibでhexdigest()してみたら、上の関数で256を足して作った値と等しかったので、そういうもんなんだな〜とざっくり理解しました。

SHA256とか他のアルゴリズムを使うなら

Utilities.DigestAlgorithm.MD5の部分を好きなアルゴリズムに変えてください。
使えるアルゴリズムはこちらのリファレンスを参照。

プロパティ アルゴリズム
MD2 MD2
MD5 MD5
SHA_1 SHA-1
SHA_256 SHA-256
SHA_384 SHA-384
SHA_512 SHA-512

まんますぎて何のための表だかわかりません。

使い方

普通の関数と同じように=MD5("hogehuga")=MD5(A1)のようにして使えます。

MD5は暗号としての目的には使えませんが、=MD5(A1&B1&C1)のようにして複数の値を束ねたユニークな値を作りたくて使いました。シートには行を追加したり削除したりするので、番号を振るかわりにそのレコードだと一意に定まる値が得られて便利です。
同じハッシュがあったときに条件付き書式で色が変わるようにしておけば、うっかり同じものを2箇所に書いてしまうことも防げます。

こんな需要がどれだけあるか知りませんが、スプレッドシートでやれることがまた一つ増えましたね。

参考文献

Hash of a cell text in Google Spreadsheet
Class Utilities - computeDigest(algorithm, value, charset)
Enum DigestAlgorithm

33
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
15