あたしにゃ~そういう難しいことはわからないですがね(こん平風)、共通鍵暗号方式というのは、とある文字列を暗号化してしまう為に使う鍵(パスワード)と、暗号化したものを元に戻す復号化に使う鍵が一緒、というのが、共通鍵暗号方式つーらしいんですわ。cryptというのは暗号化、復号化するためのプログラムのことで、直訳は「(ドーム型)地下室」という意味らしいですね。

ということで、今回はNode.jsのcryptを使って、データの暗号化と復号化の方法を簡単なサンプルを用いて紹介します。

暗号化

cryptはNode.js自体の機能なので、npm isntallする必要はなく、そのままrequireすれば使えます。

js
1
2
3
4
5
6
7
8
9
var crypto = require('crypto');
 
// 'password'のところが、共通鍵です。
var cipher = crypto.createCipher('aes-256-cbc', 'password');
var text = '共通鍵暗号方式'
var crypted = cipher.update(text, 'utf-8', 'hex');
crypted += cipher.final('hex');
console.log(crypted);
// 暗号化された文字列→1c0d50c3e73e352066353f8dd40a16af4f8160d8199f3858ec8a674b58b2e4fc

表示された文字は、ちゃんとごちゃごちゃした文字になったと思います。今度はこれを複合化します。

復号化

js
1
2
3
4
5
decipher = crypto.createDecipher('aes-256-cbc', 'password');
dec = decipher.update('1c0d50c3e73e352066353f8dd40a16af4f8160d8199f3858ec8a674b58b2e4fc', 'hex', 'utf-8');
dec += decipher.final('utf-8');
console.log(dec);
// 復号化された文字列→共通鍵暗号方式

複雑なかんじかなぁーとおもいきや、案外簡単に使えました。

Node.js v0.8.14 マニュアル & ドキュメンテーション
http://nodejs.jp/nodejs.org_ja/docs/v0.8/api/crypto.html