【Node.js】cryptoを使って暗号化をする

ユーザーのメールアドレスやパスワードをDBに格納する場合はセキュリティ上の観点から、暗号化させる必要があったのでメモ。

メールアドレスは復元が可能な可逆方式、パスワードは復元が不可能な不可逆方式で暗号化させる必要があるかと思います。

以下はメールアドレスは aes-256-ctr で、パスワードは hash 方式で暗号化させるサンプルコードになります。

メールアドレス

const crypto = require('crypto');
const key = ‘abc’;
// 暗号化
const encrypt = (text) => {
    let cipher = crypto.createCipher(‘aes-256-ctr’ ,key)
    let crypted = cipher.update(text,'utf8','hex')
    crypted += cipher.final('hex');
    return crypted;
}

// 復元
const decrypt = (text) => {
    let decipher = crypto.createDecipher(‘aes-256-ctr’,key);
    let dec = decipher.update(text,'hex','utf8')
    dec += decipher.final('utf8');
    return dec;
};

// 例
const val = encrypt('apple');
// e15690645d
decrypt(val);
// apple

パスワード

// 暗号化
const hashed = (password) => {
   let hash = crypto.createHmac('sha512', password)
   hash.update(password)
   let value = hash.digest('hex')
   return value;
}

// 例
hashed(‘apple’)
e8244ca53f71dc5be93bc074286828f466eca7cdd46ef47438d83d02f250be9a53825d133c5ef5cd99dadb5b957f39d2f9bbd0dbc20eec350768bcdda56a73bb

Related Contents

Pickup Contents