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);
})()