📚 Tutorial🕸️ Express JsAdvance - Encrypt

Encrypt

1. For Password / not invertible hashing

Using bcryptjs for data that are not suppose to invertible.

yarn add bcryptjs
server.ts
import * as bcrypt from 'bcryptjs';
 
const SALT_ROUNDS = 12;
 
/** Hash the plain password to hash */
export async function hashPassword(plainPassword: string): Promise<string> {
    return await bcrypt.hash(plainPassword, SALT_ROUNDS);
};
 
/** Check the plain password is match to the hash */
export async function checkPassword(plainPassword: string, hashPassword: string): Promise<boolean> {
    return await bcrypt.compare(plainPassword, hashPassword);
}
 
(async () => {
    const pw = await hashPassword("123abc");
    const isMatch = await checkPassword("123abc", pw);
})()

2. For Encrypt Data / invertible hashing

Using crypto-js with AES for data that are suppose to invertible.

yarn add crypto-js dotenv
server.ts
import "dotenv/config";
import CryptoJS from "crypto-js"
 
// Need a secret key for encrypt / decrypt
const CRYPTO_SECRET_KEY = process.env.CRYPTO_SECRET_KEY || "my_sEcReT_1@3Pw";
 
export function encryptStr(text: string){
    const encryptText = CryptoJS.AES.encrypt(text, CRYPTO_SECRET_KEY).toString();
    return encryptText;
}
 
export function decryptStr(cipherText: string){
    const bytes = CryptoJS.AES.decrypt(cipherText, CRYPTO_SECRET_KEY);
    return bytes.toString(CryptoJS.enc.Utf8);
}
 
(() => {
    const encryptResult = encryptStr("OMG132");
    const decryptResult = decryptStr(encryptResult);
})()