Làm cách nào để giải mã dữ liệu trong NodeJS?

Khi nói đến việc lưu trữ bất kỳ thứ gì nhạy cảm, cho dù đó là dữ liệu hay thứ gì khác, bạn phải lưu trữ một cách an toàn và bảo mật. Ví dụ: dữ liệu Đăng ký/Đăng nhập phải được mã hóa trước sau đó mới được giải mã khi sử dụng

TẢI XUỐNG MÃ NGUỒN


Làm cách nào để giải mã dữ liệu trong NodeJS?

Đối với Demo và Mã nguồn Cuộn xuống

#Tạo một nút mới. js với các phụ thuộc tiền điện tử

Chúng tôi sẽ tạo một dự án mới để làm việc với Crypto, nơi bạn sẽ thấy cách mã hóa và giải mã dữ liệu. Để bắt đầu, Thực hiện lệnh sau

          
npm init -y
          
        

Lệnh trên sẽ tạo một gói mới. json và khởi tạo dự án của chúng tôi. Chúng tôi sẽ sử dụng Node. js Thư viện mã hóa cho bất kỳ và tất cả logic mã hóa và giải mã

Để cài đặt phần phụ thuộc, hãy thực hiện thao tác sau từ dòng lệnh

          
npm install crypto --save
          
        

Cuối cùng, chúng ta cần bắt đầu xây dựng dự án của mình. Chúng tôi có tất cả các tệp cần thiết để sử dụng trong khi thực hiện việc này. Để dự án sạch sẽ, chúng tôi sẽ tạo một Hàm cho tất cả quá trình mã hóa và giải mã sẽ khởi tạo. Khi chúng ta cần Mã hóa hoặc Giải mã dữ liệu của mình

#Mã hóa và giải mã dữ liệu bằng thuật toán mật mã

Chúng tôi sẽ sử dụng JavaScript hiện đại cho ví dụ này, điều đó có nghĩa là chúng tôi sẽ tạo một lớp ES6 cho logic mã hóa và giải mã của chúng tôi

Tạo và mở mật mã của dự án. js và bao gồm đoạn mã sau

          
const crypto = require('crypto');
const secret = 'appSecretKey';
const rounds = 9921;
const keySize = 32;
const algorithm = 'aes-256-cbc';
const salt = crypto.createHash('sha1').update(secret).digest("hex");
          
        

Ở đây, chúng tôi sẽ cung cấp các phương pháp đồng bộ và không đồng bộ để mã hóa và giải mã tệp. Ngoài ra, chúng tôi xác định ở trên rằng chúng tôi sẽ sử dụng phương pháp thuật toán aes-256-cbc

Bây giờ, nếu chúng ta muốn mã hóa một đối tượng JavaScript trên đĩa. Nếu chúng tôi muốn thực hiện việc này một cách đồng bộ, chúng tôi sẽ xem xét chức năng mã hóa bên dưới

          
function encryptData(data) {
try {
let iv = crypto.randomBytes(16);
let key = crypto.pbkdf2Sync(secret, salt, rounds, keySize, 'sha512');
let cipher = crypto.createCipheriv(algorithm, Buffer.from(key), iv);
let encryptedData = Buffer.concat([cipher.update(JSON.stringify(data)), cipher.final()]);
return iv.toString('base64') + ':' + encryptedData.toString('base64');
}
catch (err) {
console.error(err)
return false;
}
}
          
        

Trong coed ở trên, chúng tôi xác định rằng chúng tôi muốn sử dụng thuật toán AES. Vì chúng tôi muốn lưu vào một tệp, chúng tôi muốn tạo bộ đệm từ dữ liệu văn bản gốc của mình. Khi chúng tôi có bộ đệm được mã hóa, chúng tôi có thể ghi vào hệ thống tệp và trả lại tin nhắn

Chúng tôi đang tạo một mật mã trong chức năng. Sau khi chúng tôi gọi mật mã. final() chúng tôi không thể sử dụng mật mã trong tương lai. Do đó, chúng tôi sẽ nhận được kết quả ngẫu nhiên nếu chúng tôi tạo một biến lớp cho nó và cố gắng sử dụng nó nhiều lần

Để giải mã tệp này, chúng tôi sẽ gọi phương thức giải mã

          
function decryptData(encData) {
try {
let textParts = encData.split(':');
let iv = Buffer.from(textParts.shift(), 'base64');
let encryptedData = Buffer.from(textParts.join(':'), 'base64');
let key = crypto.pbkdf2Sync(secret, salt, rounds, keySize, 'sha512');
let decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), iv);
let decryptedData = decipher.update(encryptedData);
decryptedData = Buffer.concat([decryptedData, decipher.final()]);
return JSON.parse(decryptedData.toString());
}
catch (err) {
console.error(err)
return false;
}
}
          
        

Trong chức năng trên, chúng tôi đang đọc tệp vào bộ đệm, giải mã nó bằng thuật toán AES và trả lại đối tượng đã giải mã cho người dùng

#Đây là ví dụ sử dụng mã hóa và giải mã dữ liệu.
          
var dataObj = {};
dataObj.email = '[email protected]';
dataObj.id = 2451;

var encrytedText = encryptData(dataObj);
console.log(`Encrypted text - ${encrytedText}`);
console.log(`Decrypted text: `);
console.log(decryptData(encrytedText));                
          
        

Bạn vừa xem cách mã hóa và giải mã dữ liệu với Node. thư viện mã hóa js. Điều này rất hữu ích & an toàn khi bạn cần mã hóa dữ liệu nhạy cảm. Ví dụ: giả sử chúng tôi muốn tạo Ứng dụng Đăng ký/đăng nhập và muốn lưu Tên người dùng và Mật khẩu. Chúng tôi có thể trong trường hợp này & điều này để loại bỏ tất cả các vấn đề bảo mật

Bạn sẽ nhận được tất cả các tệp, khi bạn tải xuống mã nguồn. Và sau hơn bạn có thể chỉnh sửa nó theo bạn

Các ứng dụng web có quyền truy cập vào lượng dữ liệu khổng lồ thuộc về các cá nhân, tổ chức và chính phủ. Càng nhiều dữ liệu được truy cập, rủi ro đối với bảo mật dữ liệu càng lớn. Các kỹ thuật mật mã và mã hóa được các nhà phát triển phần mềm sử dụng để bảo vệ dữ liệu nhạy cảm khỏi các bên độc hại

Mật mã được sử dụng để bảo vệ dữ liệu được lưu trữ trong cơ sở dữ liệu hoặc được truyền qua mạng trong ngành phát triển phần mềm. Bạn phải xử lý, di chuyển và lưu trữ dữ liệu một cách an toàn và bảo mật

Kết quả là, với tư cách là một Nút. js, bạn phải hiểu cách mã hóa và giải mã dữ liệu để bảo mật dữ liệu do hệ thống của bạn xử lý. Để mã hóa và giải mã dữ liệu, Node. js bao gồm một thư viện tích hợp có tên là tiền điện tử

Mục tiêu của mã hóa và giải mã là tăng cường bảo mật. Blog này sẽ chỉ cho bạn cách sử dụng Crypto trong Node. js để mã hóa và giải mã tin nhắn với hướng dẫn từng bước. Bắt đầu nào. 🚀

Mật mã trong nút. js

Để phát triển phần mềm, mật mã là điều cần thiết. Quá trình chuyển đổi văn bản thuần thành văn bản không thể đọc được và ngược lại được gọi là mật mã. Chỉ người gửi và người nhận thông tin hiểu nội dung của nó theo cách này

Làm cách nào để giải mã dữ liệu trong NodeJS?

Bạn có thể băm mật khẩu trong Node. js và lưu trữ chúng trong cơ sở dữ liệu để không thể chuyển đổi dữ liệu thành văn bản thuần túy sau khi đã được băm; . Khi các tác nhân độc hại có quyền truy cập vào cơ sở dữ liệu của bạn, chúng sẽ không thể giải mã dữ liệu được mã hóa. Dữ liệu người dùng khác cũng có thể được mã hóa và giải mã trong quá trình truyền

Nút chính xác là gì. mô-đun mật mã js?

nút. js cung cấp các chức năng mã hóa để hỗ trợ bảo mật cho Nút của bạn. ứng dụng js. Nó bao gồm các hàm bao cho hàm băm, HMAC, mật mã, giải mã, ký và xác minh các chức năng của OpenSSL

Bởi vì tiền điện tử được tích hợp vào Node. js, nó không yêu cầu quá trình triển khai hoặc cấu hình dài dòng. Không giống như các mô-đun khác, Crypto không yêu cầu cài đặt trước khi được sử dụng trong Nút. ứng dụng js

Các lớp tiền điện tử trong nút. js

Chúng ta hãy xem các lớp tiền điện tử cho phép chúng ta triển khai mật mã

  • mật mã. Lớp Cipher chịu trách nhiệm mã hóa dữ liệu. Lớp Mật mã được gọi khi người dùng nhập mật khẩu trong quá trình đăng ký để mã hóa mật khẩu
  • giải mã. Giải mã các văn bản được mã hóa là trách nhiệm của lớp Giải mã. Khi gửi thông tin an toàn cho nhà phát triển khác, bạn phải mã hóa thông tin đó. Cách duy nhất để người nhận đọc được thông tin là giải mã nó. Đây chính xác là những gì lớp Giải mã hoàn thành
  • Băm. Lớp Hash được sử dụng để băm văn bản thuần túy. Băm chỉ đơn giản là chuyển đổi văn bản thuần túy thành các hàm băm
  • Chứng chỉ. Chứng chỉ bao gồm một cặp khóa và thông tin khác được sử dụng để mã hóa tài liệu điện tử. Chứng chỉ có thể tạo khóa phiên cho mục đích truyền dữ liệu an toàn qua internet. Với lớp Chứng chỉ tiền điện tử, bạn có thể sử dụng triển khai SPKAC của OpenSSL để hoạt động với Thử thách và Khóa công khai đã ký (SPKAC)
Làm cách nào để giải mã dữ liệu trong NodeJS?
  • DiffieHellman. Trao đổi khóa Diffie-Hellman được sử dụng bởi lớp DiffieHellman của Crypto. Trao đổi khóa Diffie-Hellman là một kỹ thuật để truyền các khóa mật mã một cách an toàn qua các mạng công cộng. Điều này bảo vệ các khóa chỉ được sử dụng bởi người gửi và người nhận thông tin
  • PTDH. Đường cong elip Thuật toán Diffie-Hellman (ECDH) được sử dụng để tạo cặp khóa công-riêng dùng chung có đường cong elip
  • HMAC. Với việc sử dụng bí mật được chia sẻ, mã xác thực thông báo dựa trên hàm băm (HMAC) cho phép bạn cung cấp chữ ký điện tử. Phương thức HMAC được sử dụng bởi lớp HMAC của Crypto để ký số
  • bảng hiệu. Lớp dấu hiệu được sử dụng để tạo chữ ký. Các mật mã phải được ký và sau đó được xác minh để xác thực để mật mã có hiệu quả. Khi người nhận nhận được mật mã, họ có thể kiểm tra chữ ký để xem nó có phải là thật không
  • kiểm chứng. Cách duy nhất để xác định giá trị của mật mã băm là sử dụng phương thức xác minh

thực hành

Cài đặt cần thiết cho quá trình?

  • Nút. js. Đó là môi trường thời gian chạy JavaScript thực thi mã JavaScript bên ngoài trình duyệt
  • tiền điện tử. Nó là một nút sẵn có. js cung cấp các hoạt động mã hóa để giúp bảo mật Node. ứng dụng js

Trong phần thực hành này, chúng ta sẽ xem xét cách chúng ta có thể sử dụng gói tiền điện tử trong nút. js để mã hóa và giải mã một tin nhắn bí mật. Để làm như vậy, trước tiên chúng ta sẽ bắt đầu với việc tạo gói. json và sau đó khởi tạo npm trong thư mục mới tạo. Sau đó, chúng tôi sẽ cài đặt gói tiền điện tử để sử dụng nó để mã hóa và giải mã. Xác minh cài đặt gói, sau đó chúng tôi sẽ tiếp tục và nhập gói vào cơ sở mã của chúng tôi. Sau đó, chúng tôi sẽ xác định loại thuật toán mà chúng tôi sẽ sử dụng để mã hóa và mục đích giải mã

Sau đó, chúng tôi sẽ sử dụng gói để tạo 16 byte và 32 byte dữ liệu ngẫu nhiên để có thể sử dụng nó làm khóa bí mật cho mục đích mã hóa. Xác định đầu vào và loại đầu ra, chúng tôi sẽ kiểm tra đầu ra được mã hóa. Khi thành công, chúng tôi sẽ sử dụng cùng một gói để thực hiện quá trình giải mã. Sau khi hoàn tất, chúng tôi cũng sẽ kiểm tra tin nhắn đã giải mã và xác minh tương tự với tin nhắn mà chúng tôi đã mã hóa

Ghi chú. Vui lòng đảm bảo rằng Nút. js được cài đặt đúng cách trên máy cục bộ, nếu không, nó có thể hiển thị nhiều lỗi trong khi thực hiện theo quy trình

Tạo một thư mục mới trên máy cục bộ của bạn

Làm cách nào để giải mã dữ liệu trong NodeJS?

Mở thư mục vừa tạo vào trình chỉnh sửa mã

Làm cách nào để giải mã dữ liệu trong NodeJS?

Nhấp chuột phải vào ngăn điều hướng bên trái và nhấp vào Tệp mới

Làm cách nào để giải mã dữ liệu trong NodeJS?

Tạo một tệp mới với tên gói. json

Làm cách nào để giải mã dữ liệu trong NodeJS?

Nhấp chuột phải vào thư mục mới tạo và nhấp vào Git Bash Here

Làm cách nào để giải mã dữ liệu trong NodeJS?

Chạy lệnh. npm init

Nhập tên cho pkg và nhấn enter để tiếp tục với cài đặt mặc định

Làm cách nào để giải mã dữ liệu trong NodeJS?

Cuối cùng, bạn sẽ thấy cấu trúc như trong hình bên dưới

Làm cách nào để giải mã dữ liệu trong NodeJS?

Bạn có thể xác minh chéo giống nhau bằng cách xem gói. tập tin json

Làm cách nào để giải mã dữ liệu trong NodeJS?

Bây giờ, chúng ta cần cài đặt gói tiền điện tử. Để làm cái tương tự

Thực hiện lệnh. npm install crypto --save

Làm cách nào để giải mã dữ liệu trong NodeJS?

Khi cài đặt thành công bạn sẽ thấy kết quả như hình bên dưới

Làm cách nào để giải mã dữ liệu trong NodeJS?

Nếu bạn nhìn vào cấu trúc tệp, bạn sẽ thấy cấu trúc sau

Làm cách nào để giải mã dữ liệu trong NodeJS?

mở gói. json để xác minh việc cài đặt gói tiền điện tử

Làm cách nào để giải mã dữ liệu trong NodeJS?

Bây giờ, trong cấu trúc tệp, hãy tạo một tệp mới với tên index. js

Làm cách nào để giải mã dữ liệu trong NodeJS?

mở chỉ mục. js và nhập gói tiền điện tử bằng mã như trong hình bên dưới

Làm cách nào để giải mã dữ liệu trong NodeJS?

Bây giờ, để thực hiện quá trình mã hóa, chúng ta cần sử dụng một thuật toán. Sử dụng mã như trong hình bên dưới. Chúng tôi sẽ sử dụng thuật toán 'aes-256-cbc'

Làm cách nào để giải mã dữ liệu trong NodeJS?

Tiền điện tử. Phương thức RandomBytes() có sẵn của gói tiền điện tử được sử dụng để tạo dữ liệu ngẫu nhiên 16 byte hoặc 32 byte như được cung cấp trong đối số của nó. InVec (tức là. Vectơ khởi tạo) được sử dụng để lưu trữ 16 byte dữ liệu ngẫu nhiên từ tiền điện tử. phương thức sẵn có RandomBytes()

Làm cách nào để giải mã dữ liệu trong NodeJS?

Khởi tạo một biến chứa thông điệp bí mật

Làm cách nào để giải mã dữ liệu trong NodeJS?

secKey (tức là. Securitykey) đã lưu trữ 32 byte dữ liệu ngẫu nhiên được tạo bằng tiền điện tử. phương thức sẵn có RandomBytes()

Làm cách nào để giải mã dữ liệu trong NodeJS?

Chúng ta cần sử dụng chức năng mã hóa sẵn có (tức là. createCipheriv()) để mã hóa dữ liệu. Phải mất ba đối số như sau

  • Loại thuật toán được sử dụng để mã hóa
  • Khóa bảo mật (biến chứa 32 byte dữ liệu được tạo ngẫu nhiên)
  • Vectơ khởi tạo (biến chứa 16 byte dữ liệu được tạo ngẫu nhiên)
Làm cách nào để giải mã dữ liệu trong NodeJS?

Cuối cùng, để mã hóa tin nhắn, chúng ta cần sử dụng phương thức sẵn có update() của gói tiền điện tử, nhận đối số như sau

  • Tin nhắn được mã hóa
  • Kiểu mã hóa đầu vào (utf-8)
  • Kiểu mã hóa đầu ra (hex)
Làm cách nào để giải mã dữ liệu trong NodeJS?

Bây giờ, khi quá trình mã hóa đang được thực hiện, chúng ta cần một cách để dừng việc thực thi thuật toán sau khi thông báo được mã hóa. Để làm như vậy, chúng ta có thể sử dụng phương thức sẵn có final() bằng cách sử dụng mã như trong hình bên dưới và cuối cùng xử lý thông báo được mã hóa

Làm cách nào để giải mã dữ liệu trong NodeJS?

Chạy ứng dụng bằng lệnh

________số 8_______

Làm cách nào để giải mã dữ liệu trong NodeJS?

Khi thực hiện thành công, bạn sẽ thấy thông báo được mã hóa dưới dạng đầu ra như trong hình bên dưới

Làm cách nào để giải mã dữ liệu trong NodeJS?

Bây giờ, vì mã hóa đã hoàn tất, chúng tôi cũng cần thực hiện giải mã tin nhắn. Để làm như vậy, chúng tôi sẽ sử dụng hàm sẵn có createDecipheriv() của gói tiền điện tử. Nó lấy những điều sau đây làm đối số

  • Loại thuật toán được sử dụng để giải mã
  • Khóa bảo mật (biến chứa 32 byte dữ liệu được tạo ngẫu nhiên)
  • Vectơ khởi tạo (biến chứa 16 byte dữ liệu được tạo ngẫu nhiên)
Làm cách nào để giải mã dữ liệu trong NodeJS?

Để giải mã thông báo, chúng tôi sẽ sử dụng phương thức sẵn có update() nhận các đối số sau

  • Tin nhắn được mã hóa
  • Kiểu mã hóa đầu vào (hex)
  • Kiểu mã hóa đầu ra (utf-8)
Làm cách nào để giải mã dữ liệu trong NodeJS?

Cuối cùng, khi quá trình giải mã được thực hiện, chúng ta sẽ phải dừng việc thực thi thuật toán. Để làm như vậy, một lần nữa chúng ta sẽ sử dụng phương thức có sẵn final() bằng cách sử dụng mã như trong hình bên dưới và xuất thông báo được giải mã

Làm cách nào để giải mã dữ liệu trong NodeJS?

Toàn bộ mã cùng với mã hóa và giải mã tin nhắn được hiển thị trong hình bên dưới

Làm cách nào để giải mã dữ liệu trong NodeJS?

Chạy ứng dụng bằng lệnh

________số 8_______

Làm cách nào để giải mã dữ liệu trong NodeJS?

Khi thực hiện thành công, bạn sẽ thấy thông báo được mã hóa và giải mã như trong hình bên dưới

Làm cách nào để giải mã dữ liệu trong NodeJS?

Phần kết luận

Trong phần thực hành này, chúng tôi đã xem xét cách chúng tôi có thể sử dụng gói tiền điện tử trong Node. js để mã hóa và giải mã một tin nhắn bí mật. Để làm như vậy, đầu tiên chúng tôi bắt đầu với việc tạo gói. json và sau đó khởi tạo npm trong thư mục mới tạo. Sau đó, chúng tôi đã cài đặt gói tiền điện tử để sử dụng nó để mã hóa và giải mã. Xác minh cài đặt gói, sau đó chúng tôi tiếp tục và nhập gói vào cơ sở mã của chúng tôi. Sau đó, chúng tôi đã xác định loại thuật toán mà chúng tôi sẽ sử dụng cho mục đích mã hóa và giải mã. Sau đó, chúng tôi đã sử dụng gói để tạo 16 byte và 32 byte dữ liệu ngẫu nhiên để có thể sử dụng nó làm khóa bí mật cho mục đích mã hóa. Xác định loại đầu vào và đầu ra, chúng tôi đã kiểm tra đầu ra được mã hóa. Khi thành công, chúng tôi đã sử dụng cùng một gói để thực hiện quá trình giải mã. Sau khi hoàn tất, chúng tôi cũng đã kiểm tra tin nhắn đã giải mã và xác minh tương tự với tin nhắn mà chúng tôi đã mã hóa. Chúng tôi sẽ đưa ra nhiều trường hợp sử dụng như vậy trong các blog sắp tới của chúng tôi

Trong khi đó…

Nếu bạn là một Người yêu thích Node đầy tham vọng và muốn khám phá thêm về các chủ đề trên, đây là một số blog của chúng tôi để bạn tham khảo

  • Cách thiết lập trình quản lý quy trình daemon PM2 cho Nút. ứng dụng js?
  • Cách tải một hoặc nhiều hình ảnh lên thư mục cục bộ bằng Multer trong Node. js?
  • Cách hiển thị tin nhắn flash trong nút. js bằng Gói Connect-flash?
  • Cách gửi email tùy chỉnh bằng cách tích hợp SendGrid với Nút. ứng dụng js?

Tiếp tục khám phá -> Tiếp tục học hỏi -> Tiếp tục làm chủ

Tại Workfall, chúng tôi cố gắng cung cấp công nghệ tốt nhất và cơ hội trả lương cho các lập trình viên giỏi trên khắp thế giới. Nếu bạn đang muốn làm việc với các khách hàng toàn cầu, xây dựng các sản phẩm tiên tiến và kiếm được nhiều tiền khi làm việc đó, hãy thử làm việc. com/đối tác hôm nay

Làm cách nào để mã hóa và giải mã đối tượng trong NodeJS?

// mô-đun tiền điện tử const crypto = require("crypto"); . RandomBytes(16); . RandomBytes(32);

Làm cách nào để mã hóa và giải mã dữ liệu JSON trong NodeJS?

Mã mã hóa của tôi được cho là như thế này. const mã hóa = khóa. mã hóa(dữ liệu, 'base64'); . json({ trạng thái. 200, tin nhắn. "Xong", dữ liệu. được mã hóa;

Làm thế nào có thể giải mã dữ liệu?

Khóa đối xứng được sử dụng trong cả quá trình mã hóa và giải mã. Để giải mã một đoạn bản mã cụ thể, phải sử dụng khóa được sử dụng để mã hóa dữ liệu . Mục tiêu của mọi thuật toán mã hóa là làm cho việc giải mã bản mã được tạo mà không sử dụng khóa càng khó càng tốt.

Làm cách nào để mã hóa và giải mã dữ liệu trong JavaScript?

Để giải mã bản mã trở lại thành tin nhắn văn bản thuần túy ban đầu, chúng ta có thể sử dụng chức năng giải mã sau. const decrypted = CryptoJS. AES. giải mã(mã hóa, khóa);