【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

使っていないDockerのimageを削除するワンライナー

以下のコマンドで使用していないDockerのimageを削除できます。

    $ docker rmi $(docker images | grep "^" | awk "{print $3}")

ビルドしていたらいつのまにかDockerのimageが作成されまくるので定期的にクリーンアップする必要があるので便利。

JavaScriptの例外処理を上手に書く

Errorを継承したCustomErrorクラスを使ったらきれいに書けた。

custom_error.js

class CustomError extends Error {
  constructor ( message = 'エラーが発生しました') {
    super();
    this.name = 'CustomError';
    this.message = message;
  }
}
module.exports = CustomError;

未成年がアクセスしてはいけない機能を実装する場合は下のような感じになります。


const CustomError = require('./custom_error.js');

const validateAge = (age) => {
    if (age < 20) {
         new CustomError('未成年はアクセスしてはいけません');
    }
}


try {
    validateAge(age)
    ...任意の処理...
} catch (err) {
    if (err.name === 'CustomError'){
        alert(err.message);
    }else{
        alert('予期しないエラーが発生しました');
    }
}


サーバー側でもクライアント側でも使えて便利。