md5でファイルの整合性を取ろうとしたら・・・

MD5とは

暗号学ハッシュ関数の一つであり、ハッシュ値は128bitで表記されます。
ファイルの整合性を確認する場合に一般的に用いられます。
同じファイルの場合、同じ値を返すものの、
少しでも異なる場合、全く違うハッシュ値を返すのが特徴です。

自分の場合・・・

APIで取得したデータをProxy→ブラウザで表示させたい場合に活用しました。
データはBinary形式のデータで直にダウンロードしたファイルそのもののハッシュ値
Proxyでのハッシュ値、ブラウザで表示されるハッシュ値を比較して、
全てに整合性が見られれば良しとします。

Node.jsではMD5を簡単に実装できる

これだけ。

var md5 = require('md5');
console.log(md5('message'));

www.npmjs.com

ローカルのFileに対する適用

Linuxの場合

uxmilk.jp

Windowsの場合

qiita.com

巨大なファイルに対しては良好でないケースも

自分のように1MBを超えるようなファイルに対してMD5を適用すると、
以下のような警告エラーが表示されます。
MD5を適用するにあたってメモリ容量が限界値を超えているのでしょうか。
他にもnpmなどでInstallする場合にこのようなエラーが出力されるみたいです。

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: node::Abort() [/usr/local/bin/node]

解決策

コマンドでの実行の場合、ヒープのメモリ容量を大きくしてやります。
max-old-space-size のデフォルト値は 1.4GBらしいので、
1400より大きくしてやう必要がありますね。

node --max-old-space-size=8192 [Command]


dockerの場合、docker-compose.ymlにて以下のような感じで
コンテナへの割り当てメモリを増やせばいいと思います。

app:
    build: .
    working_dir: /app
    shm_size: 4GB // 追加

qiita.com