bcrypt는 다른 두 문자열을 비교하고 true를 반환합니다.

Nov 15 2020

Node.js에서 새로 고침 토큰 jwt를 프로그래밍하고 있습니다. 로그인 후 해시하여 데이터베이스에 저장합니다.

  1. 첫 번째 토큰 :

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiOWRiMTcwMmMtNDkyYy00MTJmLTkyM2QtM2Y5MWQyYzk0NTNjIiwicm9sZSI6IkNVU1RPTUVSX1JPTEUiLCJpYXQiOjE2MDU0NjA4NTksImV4cCI6MTYwNTQ2NDQ1OX0.p6LTPotLugZ-JWp4Xmt4chwWxtqqZRXuXDBhDdqLsLI

  1. 보안 토큰 :

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiOWRiMTcwMmMtNDkyYy00MTJmLTkyM2QtM2Y5MWQyYzk0NTNjIiwicm9sZSI6IkNVU1RPTUVSX1JPTEUiLCJpYXQiOjE2MDU0NjEzMjIsImV4cCI6MTYwNTQ2NDkyMn0.qMzg99DE1DvDjoMXeK08l12SlfbQd7GUSHEF5X8Mt4w

Bcrypt 해시 :

$2b$10 $ RTZbH4UONRaBnam.oALmhuIs / veX.h7e3CeMlmQjk9GVC4kKPGsBO

두 토큰은 다르며 bcrypt는 두 경우에서 인코딩 된 해시와 일치 함을 보여줍니다.

나는 또한 사이트를 통해 이것을 디버깅했고 같은 것을-두 개의 다른 문자열이 해시와 일치하는 것을 보여줍니다-왜?

다음은 내 해싱 방법입니다.

  /**
   * generate hash from password or string
   * @param {string} password
   * @returns {Promise<string>}
   */
  static async generateHash(password: string): Promise<string> {
    return bcrypt.hash(password, 10);
  }

  /**
   * validate text with hash
   * @param {string} password
   * @param {string} hash
   * @returns {Promise<boolean>}
   */
  static async validateHash(password: string, hash?: string): Promise<boolean> {
    return bcrypt.compare(password, hash || '');
  }

답변

1 Bravo Nov 16 2020 at 00:38

bcrypt는 72 자 "암호"로 제한됩니다.

"암호"의 길이는 220 자이고 처음 147자는 동일합니다 (두 경우 모두 동일한 JWT 콘텐츠의 헤더와 첫 번째 부분이기 때문).

따라서 코드는 처음에 동일한 72 자만 "해싱"합니다.