LoginSignup
0
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-08-09
    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'」を指定します。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4