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