node.jsでAES256のCBCブロックモード暗号化を行う


    var cryptor = require('crypto');
    var crypto_key = 'password';
    var m = cryptor.createHash('sha256');
    m.update(crypto_key);
    crypto_key = m.digest('binary');
    var crypto_iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f';
    var ciper_mode = 'aes-256-cbc';

    var text = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';

    // 暗号化
    var cipher = cryptor.createCipheriv(ciper_mode, crypto_key, crypto_iv);
    var enc_text = cipher.update(text, 'utf-8', 'base64');
    enc_text += cipher.final('base64');

    // 復号化
    var decipher = cryptor.createDecipheriv(ciper_mode, crypto_key, crypto_iv);
    var dec = decipher.update(enc_text, 'base64', 'utf8');
    dec += decipher.final('utf8');

    console.log(text);

ポイントは、鍵長が256でなければならないのでキーをSHA256ハッシュ化していることと、ivという初期化ベクターを与える必要があるということ。

情報間違っていたので一部修正しました。
cipher.update()にインプットのエンコードとアウトプットのエンコードを渡せるので、インプットとして文字列(UTF-8)を指定し、アウトプットはBASE64にしました。
decipher.update()はその逆です。

インプットやアウトプットをバイナリにしたい場合は「'binary'」を指定します。