GoogleAppsScript
spreadsheet
md5
sha256
ハッシュ
13
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

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

やりたいこと

  • 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

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について
SogoK
2年目駆け出しエンジニア

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
フロントエンドの開発効率を向上するヒントを教え合おう!
~
機械学習を発展させるための知識を発信しよう!
~
13
どのような問題がありますか?
新規登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
新規登録ログイン
ストックするカテゴリー