CryptoJS を使ったクライアントサイド(Javascript)とサーバーサイド(Node.js)での暗号化と復号化について。CryptoJS はbrix/crypto-jsのやつを使用します。
クライアントサイドの実装
CryptoJS のライブラリ(crypto-js.js)を head で読み込ませているとします。
var str = "Lorem ipsum dolor sit amet";
var key = "12345678901234567890123456789012";
var encrypted = CryptoJS.AES.encrypt(str, key);
console.log(encrypted.toString());
encrypt メソッドで生成した変数を toString()すると、ciphertext や iv、salt など復号化に必要なものをまとめて一つの Base64 フォーマットの文字列に変換してくれます。これを Node.js 側に送ります。
サーバーサイドの実装
var CryptoJS = require("crypto-js");
var str = "U2FsdGVkX19c2KuWxFQsC9fhaum9z8w6MtoMikCmy0Om+Mi+cAEEFu7JZl8JLOf3";
var key = "12345678901234567890123456789012";
var decrypted = CryptoJS.AES.decrypt(str, key);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
という感じで、CryptoJS を使うと簡単に暗号化と復号化ができます。ただ、クライアントサイドのソースは公開されてしまうので、クライントサイドとサーバーサイドでどう key を共有するかというのが考えどころ(ajax で取得するようにするとか?)。また、key は salting した上で使うらしいので([JavaScript]CryptoJS で AES 暗号の salt とパスフレーズから key を求める - Qiita参照)、他の暗号化/復号化ライブラリと連携して使おうとすると、実際使われている key がわからなくて難儀するかもなあと思いました。