cryptoを使って暗号化と復号を行う

Node.jsに標準で含まれるcryptoを使って文字列の暗号化や復号が行えます。

暗号化

以下の流れで文字列を暗号化します。crypto.createCipheriv()で作成したインスタンスに対し、update()final()をコールして暗号化します。
algorithmで暗号化方式を設定できます。

"use strict";
const crypto = require('crypto');

const _password = 'abcd1234';

/**
 * 暗号化処理.
 * @param {*} src 暗号化する文字列
 */
function encrypt(src) {
    if (!src) {
        return '';
    }
    const algorithm = 'aes-256-cbc';
    const key = crypto.scryptSync(_password, 'salt', 32);
    const iv = Buffer.alloc(16, 0);
    const cipher = crypto.createCipheriv(algorithm, key, iv);
    let encrypted = cipher.update(src, 'utf8', 'hex');
    encrypted += cipher.final('hex');
    return encrypted;
};

let encrypted = encrypt('20230915 Hello world');
console.log("encrypted:", encrypted);
encrypted: 2a7451a2ef034fa0d79635eab451d3983e15e710d210e86964d146087ee1a02d

復号

以下の流れで文字列を復号します。crypto.createDecipheriv()で作成したインスタンスに対し、update()final()をコールして復号します。

"use strict";
const crypto = require('crypto');

const _password = 'abcd1234';

/**
 * 復号化処理.
 * @param {*} encrypted 暗号化された文字列
 */
function decrypt(encrypted) {
    if (!encrypted) {
        return '';
    }
    const algorithm = 'aes-256-cbc';
    const key = crypto.scryptSync(_password, 'salt', 32);
    const iv = Buffer.alloc(16, 0);
    const decipher = crypto.createDecipheriv(algorithm, key, iv);
    let decrypted = decipher.update(encrypted, 'hex', 'utf8');
    decrypted += decipher.final('utf8');
    return decrypted;
};

let decrypted = decrypt('2a7451a2ef034fa0d79635eab451d3983e15e710d210e86964d146087ee1a02d');
console.log("decrypted:", decrypted);
decrypted: 20230915 Hello world
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です