Bcryptを使用して[node.js]Type scriptでパスワードを暗号化


緒論


この記事では、タイプスクリプト環境でパスワード暗号化を行う方法について説明します.
次に、ログイン時にユーザーが入力したパスワードがデータベースに格納されている暗号化パスワードと一致するかどうかを説明します.
ここです。を参照すると、javascriptベースのBcryptの使用方法がより良いです.

モジュールのインストール

npm install @types/bcrypt --saveJavaScriptとは異なり、タイプスクリプトには@types/bcryptをインストールする必要があります.

使用方法


インストールされたモジュールを使用するには、import bcrypt from "bcrypt";を上部に宣言します.
会員加入を例に、使い方を見てみましょう.
入力したパスワードを暗号化するには、genSalt()hash()の方法を使用します.
たとえば、入力されたパスワードは1q2w3e4rです.
const saltRound = 10; // 사용자 요구사항에 맞게 값 정의 가능

const salt = await bcrypt.genSalt(saltRound); // salt 생성
const hashedPW = await bcrypt.hash("1q2w3e4r", salt); // 암호화된 비밀번호 생성

// 실제로는 아래 코드처럼 사용자가 입력한 값을 이용해서 암호화 비밀번호를 생성
// const hashedPW = await bcrypt.hash(req.body.password, salt);
これでコードを書くことができます.実際にconsole.log(hashedPW)を試してみます
2b$10qXFmxZ4fXsk7Pv4sBz9Ri.dsIy611UxOGcj6xYUu5UTBAGghxEsJi
この形式の暗号化文字列を結果として得ることができる.
このように暗号化されたパスワードをデータベースに保存すると、管理者もユーザーのパスワードが何なのか分かりません.
暗号化技術を使用しないと、セキュリティが非常に脆弱になる可能性があります.そのため、ユーザー情報をデータベースに格納する場合は、暗号化技術を使用する必要があります.

比較パスワードでログインする方法


ログイン時には、ユーザが入力した원래 비밀번호と、データベースに格納されている암호화된 비밀번호とを比較する.
筆者は,登録に必要な情報をemail,passwordと仮定し,パスワード比較ロジックを記述する.
const {email, password} = req.body; // req.body로 받은 변수

// 먼저 데이터베이스에서 입력받은 이메일이 존재하는지 확인하여 있다면 데이터를 가져옴
const user = await User.find({
  email: email
});

// 가져온 데이터의 암호화된 비밀번호와 사용자가 입력한 비밀번호를 비교한다.
const check = await bcrypt.compare(password, user[0].password);

if(check) {
  // 입력한 비밀번호가 일치하는 경우 로직
  console.log("유효한 회원");
}
else {
  // 입력한 비밀번호가 일치하지 않는 경우 로직
  console.log("유효하지 않은 회원");
}
構成ロジックの場合、上記bcryptが提供するcompare()の方法を用いて構成することができる.
まず,筆者はユーザという表で電子メールを入力するユーザが存在するかどうかを確認し,そのユーザの情報をuser変数に含めた.console.log(user)の結果は次のとおりです.
[
  User {
    id: 1,
    email: '[email protected]',
    password: '$2b$10$qXFmxZ4fXsk7Pv4sBz9Ri.dsIy611UxOGcj6xYUu5UTBAGghxEsJi',
  }
]
上記の結果が得られた.
したがって、user[0].passwordでデータベースに格納された暗号化パスワードを使用することにした.
現在,compare()手法を用いて入力されたパスワード,暗号化されたパスワードを比較している.
2つのパスワードが一致する場合、check変数はtrueを返します.

ソース

  • https://www.npmjs.com/package/@types/bcrypt