Cách mã hóa mật khẩu trong JavaScript

Trách nhiệm cao nhất của bất kỳ nhà thiết kế hệ thống nào là bảo vệ dữ liệu người dùng. Vi phạm dữ liệu có thể gây ra thiệt hại trị giá hàng triệu đô la và theo Imperva, Hoa Kỳ có chi phí vi phạm dữ liệu cao nhất

Cơ hội lạm dụng dữ liệu cao hơn khi dữ liệu chỉ là văn bản thuần túy. Nếu bạn không thể bảo vệ dữ liệu, bước tiếp theo là làm cho dữ liệu không thể đọc được bằng cách mã hóa dữ liệu để kẻ tấn công không lấy được nhiều dữ liệu. Ví dụ: giả sử ai đó có quyền truy cập vào email và mật khẩu vào hồ sơ mạng xã hội của bạn. Trong trường hợp đó, thật dễ dàng để truy cập hồ sơ của bạn mà bạn không biết. Tuy nhiên, điều gì sẽ xảy ra nếu mật khẩu của bạn được mã hóa?

Nếu bạn muốn bảo vệ email của người dùng, điều đó thật tuyệt, nhưng bảo vệ mật khẩu người dùng là điều bắt buộc. Mặc dù người dùng phải đặt mật khẩu mạnh, cả người dùng và hệ thống đều hoạt động dựa trên mật khẩu bảo vệ. May mắn thay, có nhiều phương pháp thực hiện mã hóa/giải mã để giúp tăng cường an toàn cho mật khẩu. Bài viết này sẽ hướng dẫn bạn cách sử dụng password hashing với thư viện bcrypt trong Node. js

Nhảy ra đằng trước

  • Băm mật khẩu là gì?
  • Băm mật khẩu trong Node. js với bcrypt
    • Phụ thuộc Bcrypt
  • Ví dụ về băm mật khẩu với bcrypt trong Node. js
    • Mã hóa mật khẩu trong Node. js sử dụng lời hứa JavaScript
      $ mkdir bcrypt_demo
      $ cd mkdir
      $ npm init -y
      $ touch app.js
      $ npm install bcrypt --save
      
      6
    • Sử dụng hàm
      $ mkdir bcrypt_demo
      $ cd mkdir
      $ npm init -y
      $ touch app.js
      $ npm install bcrypt --save
      
      0 để băm mật khẩu trong Node. js
  • Nút. thông tin băm mật khẩu js bcrypt
    • Chi phí dữ liệu băm mật khẩu
  • Lợi ích của việc băm mật khẩu trong Node. js với bcrypt

Băm mật khẩu là gì?

Băm mật khẩu là quá trình biến mật khẩu thành các chữ cái và số bằng các thuật toán cụ thể. Băm có lợi khi kẻ xấu vi phạm dữ liệu. Với tính năng băm, dữ liệu họ nhận được ở định dạng băm và dữ liệu được băm không thể hiểu được. Một số thuật toán phổ biến để băm mật khẩu bao gồm bcrypt và SHA. Trong bài viết này, chúng tôi sẽ tập trung vào việc sử dụng bycrypt để băm mật khẩu trong Node. js. Đây là một ví dụ về băm văn bản thuần túy

hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd

Băm mật khẩu trong Node. js với bcrypt

Bcrypt là thư viện giúp bạn băm mật khẩu. Nó sử dụng hàm

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
1 dựa trên mật mã Blowfish. Mật mã Blowfish là mật mã khối đối xứng cung cấp tốc độ mã hóa tốt nhất trong ngành;

Bcrypt sử dụng muối để bảo vệ chống lại các cuộc tấn công như bảng cầu vồng, vũ phu, v.v. Bcrypt là một chức năng thích ứng, vì vậy nếu bạn thường xuyên gọi chức năng của bcrypt, nó sẽ trở nên chậm hơn. Điều này cản trở khả năng của kẻ tấn công được hưởng lợi từ một cuộc tấn công vũ phu

Phụ thuộc Bcrypt

Bcrypt cần một số phụ thuộc để hoạt động chính xác. Bcrypt yêu cầu gói nút-gyp, gói này biên dịch các mô-đun bổ trợ riêng cho Node. js. Bcrypt cũng phụ thuộc vào Python và bạn sẽ cần ≥v2. x. Người dùng Windows cần cài đặt các tùy chọn C# và C++ với phiên bản VS của họ. Bạn cũng sẽ cần OpenSSL v0. 7. 7

Ví dụ về băm mật khẩu với bcrypt trong Node. js

Điều quan trọng là phải muối và băm mật khẩu của người dùng trước khi lưu trữ chúng vì mục đích an toàn dữ liệu. Bcrypt biến một mật khẩu đơn giản thành các ký tự có độ dài cố định được gọi là hàm băm. Trước khi băm mật khẩu, bcrypt áp dụng một

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
2, một chuỗi ngẫu nhiên duy nhất làm cho hàm băm không thể đoán trước

Hãy tạo một nút. js và sử dụng bcrypt để băm mật khẩu. Sau khi tạo tệp

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
3, bạn cần cài đặt bcrypt

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save

Bây giờ, bạn đã sẵn sàng làm việc với bcrypt. Hãy nhập nó và xác định

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
4, như một yếu tố chi phí hoặc công việc

const bcrypt = require["bcrypt"]
const saltRounds = 10
const password = "[email protected]"

Mã hóa mật khẩu trong Node. js sử dụng lời hứa JavaScript
$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
6

JavaScript

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
6 là một đối tượng được trả về bởi hàm
$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
6, là biểu diễn của trạng thái hiện tại. Khi
$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
6 được trả lại cho người gọi, nó cung cấp các phương thức để xử lý thành công hay thất bại của hoạt động dựa trên điều kiện

Có hai phương pháp để mã hóa mật khẩu. Đây là phương pháp đầu tiên

hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
0

Đầu tiên, chúng ta sẽ tạo một

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
2 bằng cách sử dụng hàm
const bcrypt = require["bcrypt"]
const saltRounds = 10
const password = "[email protected]"
0 của bcrypt. Ở đây,
const bcrypt = require["bcrypt"]
const saltRounds = 10
const password = "[email protected]"
0 sẽ lấy một đối số là số
const bcrypt = require["bcrypt"]
const saltRounds = 10
const password = "[email protected]"
2. Sau đó, nếu thành công, chúng tôi sẽ cung cấp kết quả để băm cùng với mật khẩu của chúng tôi

Kết quả thành công, chúng ta sẽ nhận được hàm băm. Trong phương pháp này, chúng tôi đã sử dụng lời hứa

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
6 của JavaScript

Bạn có thể thấy đầu ra như hình bên dưới sau khi kích hoạt Node

const bcrypt = require["bcrypt"]
const saltRounds = 10
const password = "[email protected]"
4

hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
6

Băm này sẽ được lưu trữ trong cơ sở dữ liệu cùng với các chi tiết khác. Một điều nữa, bạn có nghĩ rằng tôi sẽ nhận được kết quả nếu tôi chạy lại mã không?

Sử dụng hàm
$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
0 để băm mật khẩu trong Node. js

Rõ ràng, không phải.

const bcrypt = require["bcrypt"]
const saltRounds = 10
const password = "[email protected]"
6 sẽ tạo ra một hàm băm duy nhất dựa trên muối đặc biệt mỗi lần. Đó là cách nó ngăn chặn các cuộc tấn công bảng cầu vồng. Bây giờ, hãy xem xét phương pháp thứ hai

hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
9

Ở đây, chúng tôi sẽ gọi hàm

const bcrypt = require["bcrypt"]
const saltRounds = 10
const password = "[email protected]"
7 và chỉ cung cấp
const bcrypt = require["bcrypt"]
const saltRounds = 10
const password = "[email protected]"
2. Điều này cũng sẽ tạo ra một hàm băm duy nhất mỗi lần. Bây giờ, chúng ta sẽ xác thực hàm băm đó như thế nào?

Vì vậy, đối với bcrypt đó, chúng tôi có hàm

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
0 sẽ đảm nhiệm phần đó

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
3

Nếu

hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
00 là đúng, hàm băm do mật khẩu tạo cho nó được khớp

Nút. thông tin băm mật khẩu js bcrypt

Như bạn thấy ở cuối, bạn sẽ nhận được một hàm băm dài 60 ký tự

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
5

Sự phân nhánh của hàm băm là như thế này

  • hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
    
    01. Sẽ là
    hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
    
    02 có nghĩa là
    hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
    
    03
  • hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
    
    04. Đại diện cho số mũ được sử dụng để xác định số lần lặp lại
    hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
    
    05
  • hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
    
    06. [16-byte [128-bit]], mã hóa base64 thành 22 ký tự
  • hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
    
    07. [24-byte [192-bit]], mã hóa base64 thành 31 ký tự

Chi phí dữ liệu băm mật khẩu

Dữ liệu băm sẽ trải qua một chuỗi

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
4, dẫn đến một hàm băm an toàn không thể đoán trước đối với bất kỳ hệ thống hoặc người dùng nào. Sau đó, một mô-đun sẽ sử dụng một giá trị nhất định và thực hiện
hash['[email protected]'] = 1b21hb2hb1u2gu3g2fxy1v2ux1v2y3vu12g4u3ggvgu43598sa89da98sd79adshuavusdva9sdguasd
09. Chi phí dữ liệu tùy chọn băm thường đề cập đến thời gian một vòng băm diễn ra, điều này phụ thuộc vào phần cứng của hệ thống

Trên bộ xử lý lõi 2GHz, bạn có thể mong đợi những điều sau

$ mkdir bcrypt_demo
$ cd mkdir
$ npm init -y
$ touch app.js
$ npm install bcrypt --save
5

Lợi ích của việc băm mật khẩu trong Node. js với bcrypt

Bcrypt có lợi thế đáng kể so với các phương pháp băm khác như MD5, SHA1, SHA2 và SHA3. Tất cả họ đều có thể thực hiện băm một số lượng lớn dữ liệu trong thời gian ngắn hơn. Giả sử kẻ tấn công có một hệ thống mạnh mẽ có khả năng thử 700-900 triệu mật khẩu trong vài giây. Mật khẩu của bạn chứa các giá trị chữ và số và ký tự đặc biệt sẽ bị bẻ khóa sau vài giây

Hơn 200 nghìn nhà phát triển sử dụng LogRocket để tạo ra trải nghiệm kỹ thuật số tốt hơn

Tìm hiểu thêm →

Vì vậy, bây giờ bạn biết rằng không thể sử dụng tất cả các phương pháp băm này để mã hóa mật khẩu. Bây giờ, câu hỏi chính là, làm thế nào để bcrypt cung cấp một lợi thế đáng kể ở đây? . Sau khi biết điều đó, bcrypt sẽ chậm hơn nếu kẻ tấn công thực hiện nhiều yêu cầu trong một khung thời gian. Vì vậy, nói chung, việc bẻ khóa một mật khẩu sẽ mất 12 năm chết tiệt

Ngoài ra, bcrypt sử dụng muối, giúp ngăn chặn các cuộc tấn công như tấn công bảng cầu vồng và phù hợp để bảo mật mật khẩu

Sự kết luận

Như bạn đã biết, điều quan trọng là phải bảo mật dữ liệu để tránh thiệt hại đáng kể. Kẻ tấn công có thể tìm cách truy cập vào kho lưu trữ dữ liệu của bạn nhưng mật khẩu được mã hóa tốt sẽ gây lãng phí thời gian và công sức cho kẻ tấn công. Họ sẽ không nhận được bất kỳ lợi ích nào từ dữ liệu được mã hóa của bạn

Nút. js cho phép chúng tôi sử dụng bcrypt mà không gặp trở ngại nào. Không có lý do gì để tránh nó khi xử lý mật khẩu của người dùng và các dữ liệu nhạy cảm khác. Một chức năng băm an toàn như bcrypt là cần thiết để tạo ra một hệ thống mạnh mẽ. Tôi đề nghị bạn sử dụng nó để lưu trữ mật khẩu. Bạn sẽ không phải đối phó với các vấn đề làm lộ thông tin nhạy cảm của người dùng nếu bạn đã thực hiện băm bằng bcrypt

Chỉ dành cho 200
Theo dõi các yêu cầu mạng chậm và không thành công trong sản xuất

Triển khai trang web hoặc ứng dụng web dựa trên Node là phần dễ dàng. Đảm bảo phiên bản Node của bạn tiếp tục cung cấp tài nguyên cho ứng dụng của bạn là lúc mọi thứ trở nên khó khăn hơn. Nếu bạn quan tâm đến việc đảm bảo các yêu cầu đối với dịch vụ phụ trợ hoặc bên thứ ba thành công, hãy thử LogRocket.
https. // tên lửa. com/đăng ký/

LogRocket giống như một DVR dành cho ứng dụng web và thiết bị di động, ghi lại mọi thứ diễn ra trong khi người dùng tương tác với ứng dụng của bạn theo đúng nghĩa đen. Thay vì đoán xem tại sao lại xảy ra sự cố, bạn có thể tổng hợp và báo cáo về các yêu cầu mạng có vấn đề để nhanh chóng hiểu nguyên nhân gốc rễ

Làm cách nào để bảo mật mật khẩu trong JavaScript?

Mã hóa và giải mã AES bằng Google Apps Script . mã hóa [văn bản, cụm mật khẩu]. toString[];

Làm cách nào để mã hóa mật khẩu trong javascript bằng Base64?

Mã hóa & giải mã bằng phương pháp Base64 trong React Native .
nhập Phản ứng, { Thành phần } từ 'phản ứng';
mã hóa Mật khẩu = [] => { var mã hóa = Base64. .
decryptPassword = [] => { var giải mã = ​​Base64

Làm cách nào để mã hóa mật khẩu bằng JavaScript và giải mã bằng Java?

Tiêu thụ khóa RSA
Tạo AES ngẫu nhiên [khóa, iv, muối] - sử dụng tiền điện tử. js
Sử dụng AES và mã hóa dữ liệu dễ bị tấn công
Sử dụng khóa công khai RSA để mã hóa khóa AES
Gửi dữ liệu và khóa được mã hóa qua mạng
Dịch vụ tiêu thụ khóa giải mã dữ liệu cho AES
Sử dụng khóa AES để giải mã dữ liệu
Gửi dữ liệu trở lại giao diện người dùng

Làm cách nào để tạo một chương trình mã hóa bằng JavaScript?

Tạo mật mã của riêng bạn bằng Javascript .
Dựa trên khóa riêng. Trong loại này, cùng một khóa được sử dụng để mã hóa cũng như giải mã. .
Dựa trên khóa công khai. Trong loại này, hai phím khác nhau được sử dụng. .
Phương pháp thay thế. Trong này, các ký tự được thay thế bằng một số ký tự khác gây khó đọc

Chủ Đề