ハッシュ関数といえば、長大なデータを衝突可能性の大変に低い固定長ビット列に変換してくれるものであります。現代人必須?その中でも古典的なMD5というアルゴリズムは「セキュリティ用途には使うな」とのお達しあり、しかしファイルのチェックサム代わりなど今でも随所に使われているみたい。みんな大好きMD5。
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはRaspberry Pi 3 model B+のRaspberry Pi OS(32bit)上にインストールした以下を使用しています。
-
- Node-RED v2.0.5
調べてみると、Node-REDのノードとしてもSHA-256などのセキュリティ用途に「使える」関数の実装はいろいろ存在します。そいつらについてはまた後で。今回は伝統のMD5っす。
MD5(message digest algorithm 5)
昔、お勉強のために自分で実装してみたことがあるような無いような。まあアルゴリズムは公開されているので「やればできる」作業ではあります。しかし、既に安心な実装が多数あり、いまさら自力でやることは皆無でしょう。
本サイトの以下記事でもC言語で「計算」してみておりますが、偉大なOpenSSL様をライブラリとして呼び出しているだけであります。
ソフトな忘却力(34) MD5ハッシュを計算してみる、OpenSSL
さて、パレット検索からNode-REDのノードを探索してみると以下の2つが存在します。
今回Node-REDにインストールしてみるのは黄色のマーカを引いた
node-red-contrib-md5
の方であります。最終更新は7年以上前。さずが古典なアルゴリズム、古いわね。なお、もう一つあるmd5fileというお名前の方は「長大なファイル」のMD5計算向けみたいです。まあ、今となってはmd5はダウンロードしたファイルが破損してないかどうかのチェックなどに使うのが一般的じゃないかと思うので、それはそれでありかと(使ってないケド。)
今回実験のフロー
インストールすると「機能」パレットの中に 「#md5」というノードが現れるのでそれを使ってみます。フローはこんな感じ。
左側にInjectノードが二つ、よく見ると「Hello World.」と「Hello World」で末尾のピリオドの有無を違えてます。
実行結果とその確認
上記フローを実行すれば、右端のデバッグノードにmsgが流れてきます。こんな感じ。
黄色がピリオドあり、緑がピリオド無です。プロパティ md5 のところに計算されたmd5の値が乗ってますな。
まあ上記をみても計算が正しいのかどうか確認できないので、WSL2上のLinuxのmd5sumコマンドで確かめてみます。
標準入力から文字列を食わせる場合(-t、デフォルト)は文字列末尾にCTRL-Dを押さないとなりませぬ。また–tagをつけないと入力文字列の直後にハッシュ値が表示され(ちょっと見ずらい)ます。
なおWindowsの場合、PowerShell使えばMD5どころかほとんどのハッシュアルゴリズムに対応できるみたいです。相当決意しないとPowerShell使えない忘却力の年寄です、いい加減、PowerShellに慣れないとな~。いつまでもcmd.exeで良いのか。
ともかく計算はあってるみたいね。当たり前か。