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

Trong bài viết trước, tôi đã đề cập đến Chuyển đổi chuỗi hình ảnh thành chuỗi base64 bằng Javascript nhưng trong bài viết này, tôi đã đề cập đến cách chúng ta có thể Mã hóa và Giải mã chuỗi hoặc văn bản trong Javascript để bảo mật văn bản bằng Crypto JS hoặc không sử dụng bất kỳ plugin/Thư viện bên ngoài nào

Sử dụng CryptoJS

Để mã hóa và sau đó giải mã chuỗi hoặc văn bản bằng Javascript, một trong những phương pháp dễ dàng và an toàn nhất là sử dụng thư viện CryptoJS, thư viện này cung cấp cho chúng tôi triển khai JavaScript của các thuật toán mã hóa tiêu chuẩn và an toàn

Chúng nhanh và có giao diện nhất quán và đơn giản

Có nhiều thuật toán mà bạn có thể áp dụng để mã hóa/giải mã văn bản bằng CryptoJS, chẳng hạn như MD5, SHA-1, SHA-2, SHA-3, AES, v.v.

Chúng tôi sẽ xem xét sử dụng ví dụ về Thuật toán AES trong bài viết này, dễ sử dụng và đơn giản

Giả sử chúng ta có HTML mẫu như bên dưới




encrypted


decrypted
Actual Message

Here is sample Message

Sau đó, sử dụng CryptoJS, chúng tôi có javascript để mã hóa và giải mã chuỗi như bên dưới

    var encryptedAES = CryptoJS.AES.encrypt(document.getElementById("demo3").innerHTML, "SomeSalt");
    var decryptedBytes = CryptoJS.AES.decrypt(encryptedAES, "SomeSalt");
    var plaintext = decryptedBytes.toString(CryptoJS.enc.Utf8);
    
    document.getElementById("demo1").innerHTML = decryptedBytes;
    document.getElementById("demo2").innerHTML = plaintext;

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

Nếu bạn xem mã javascript ở trên, chúng tôi có cấu hình hoặc cài đặt mẫu này cho CryptoJS bằng AES

    var encryptedAES = CryptoJS.AES.encrypt("Message", "My Secret Passphrase");
    var decryptedBytes = CryptoJS.AES.decrypt(encryptedAES, "My Secret Passphrase");
    var plaintext = decryptedBytes.toString(CryptoJS.enc.Utf8);

câu đố mẫu. https. //jsfiddle. mạng/1kd46qaz/

Không sử dụng Thư viện bên ngoài

Nếu bạn không thích phương pháp sử dụng Thư viện bên ngoài như CryptoJS ở trên, thì bạn có thể tạo hàm javascript của riêng mình để mã hóa và giải mã chuỗi, nhưng nó sẽ không an toàn như trên

const Encrypt = (salt, text) => {
  const textToChars = (text) => text.split("").map((c) => c.charCodeAt(0));
  const byteHex = (n) => ("0" + Number(n).toString(16)).substr(-2);
  const applySaltToChar = (code) => textToChars(salt).reduce((a, b) => a ^ b, code);

  return text.split("").map(textToChars).map(applySaltToChar).map(byteHex).join("");
};

const decrypt = (salt, encoded) => {
  const textToChars = (text) => text.split("").map((c) => c.charCodeAt(0));
  const applySaltToChar = (code) => textToChars(salt).reduce((a, b) => a ^ b, code);
  return encoded.match(/.{1,2}/g).map((hex) => parseInt(hex, 16)).map(applySaltToChar).map((charCode) => String.fromCharCode(charCode)).join("");
};

// encrypt
const encrypted_text = Encrypt("YourSalt", "HelloWorld"); 
document.getElementById("demo1").innerHTML=encrypted_text;

// decrypt
const decrypted_string = decrypt("YourSalt", encrypted_text); 
document.getElementById("demo2").innerHTML=decrypted_string;

đầu ra

encrypted
537e7777744c7469777f

decrypted
HelloWorld

Đây là mẫu Fiddle. https. //jsfiddle. net/8zvyfmgd/1/

Ngoài ra còn có các thư viện bên ngoài khác để mã hóa văn bản thuần túy trong javascript, nhưng tôi sẽ đề xuất bạn sử dụng CryptoJS hoặc bạn có thể sử dụng 'sodium-plus'

Chương trình Giáo dục Kỹ thuật (EngEd) này được hỗ trợ bởi Mục. Triển khai tức thì các container trên nhiều nhà cung cấp đám mây trên toàn cầu

Dùng thử miễn phí

Mã hóa và giải mã dữ liệu trong nút. js sử dụng tiền điện tử

Ngày 23 tháng 6 năm 2021
  • chủ đề
  • Nút. js

Các ứng dụng web có quyền truy cập vào một lượng lớn dữ liệu thuộc về mọi người, tổ chức và chính phủ. Dữ liệu được truy cập càng nhiều, mối đe dọa đối với bảo mật dữ liệu càng cao. Trong ngành phát triển phần mềm, các nhà phát triển sử dụng các kỹ thuật mật mã và mã hóa để 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 mật dữ liệu được lưu trữ trong cơ sở dữ liệu hoặc được truyền qua mạng công nghiệp phát triển phần mềm. Khi xử lý, di chuyển và lưu trữ dữ liệu, bạn phải thực hiện một cách an toàn và bảo mật

Như vậy với tư cách là một nút. js, bạn nên 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ý. Nút. js có một thư viện tích hợp tên là crypto để mã hóa và giải mã dữ liệu

Mã hóa và giải mã nhằm tăng cường an toàn. Bài viết này sẽ giúp bạn tìm hiểu cách sử dụng Node. js crypto để mã hóa và giải mã dữ liệu trong các ứng dụng của bạn. Ngoài ra, nó sẽ tóm tắt mật mã trong nút. js

Mục lục

điều kiện tiên quyết

Hiểu biết toàn diện về mật mã và nút. js được yêu cầu trước khi đọc bài viết này. Ngoài ra, bạn nên có

  • Nút. js được cài đặt trên máy tính của bạn
  • Trình soạn thảo văn bản như Visual Studio Code

Mật mã trong nút. js

Mật mã là rất quan trọng để phát triển phần mềm. Dữ liệu phải được bảo vệ. Mật mã học là một nghiên cứu về các kỹ thuật về cách giữ an toàn cho dữ liệu. Nó chuyển đổi dữ liệu thành bí mật bằng cách chuyển đổi văn bản rõ ràng thành văn bản không thể đọc được và ngược lại. Do đó chỉ người gửi và người nhận dữ liệu đó mới có thể hiểu được nội dung của nó

Ba thành phần chính của một hệ thống mật mã bao gồm bản rõ, bản mã và thuật toán. Để giữ bí mật thông tin, chúng tôi sử dụng mật mã và thuật toán biến bản rõ thành bản mã. Chuyển đổi dữ liệu thành văn bản không thể đọc được gọi là mã hóa và đảo ngược dữ liệu trở lại văn bản rõ ràng là giải mã

Các thuật toán mật mã sử dụng một khóa để chuyển văn bản rõ thành bản mã. Chỉ có thể chuyển đổi bản mã trở lại bản rõ nếu bạn có đúng chìa khóa bên mình

Bạn sử dụng mã hóa đối xứng nếu bạn mã hóa và giải mã dữ liệu bằng cùng một khóa. Mã hóa bất đối xứng được sử dụng nếu các khóa khác nhau được sử dụng để mã hóa và giải mã

Để bảo vệ dữ liệu trong Node. js, bạn phải lưu trữ mật khẩu đã băm trong cơ sở dữ liệu. Bằng cách này, bạn không thể chuyển đổi dữ liệu thành văn bản gốc sau khi được băm. Nó phải được xác minh

Nếu những kẻ tấn công độc hại có quyền truy cập vào cơ sở dữ liệu, chúng sẽ không đọc dữ liệu vì nó đã được mã hóa. Hơn nữa, họ không có chìa khóa để giúp họ làm điều đó

Nút. mô-đun mật mã js

nút. js Mô-đun crypto cung cấp các hoạt động mã hóa để giúp bạn bảo mật Nút của mình. ứng dụng js. Nó hỗ trợ băm, HMAC để xác thực, mật mã, giải mã, v.v.

Như đã nêu trước đó, crypto là một thư viện tích hợp trong Node. js. Do đó, nó không yêu cầu cài đặt và cấu hình trước khi sử dụng nó trong Nút của bạn. ứng dụng js. Mô-đun crypto xử lý một thuật toán thực hiện mã hóa và giải mã dữ liệu

Mô-đun crypto cho phép bạn băm văn bản thuần túy trước khi lưu trữ dữ liệu trong cơ sở dữ liệu. Không thể giải mã dữ liệu đã băm bằng một khóa cụ thể, chẳng hạn như dữ liệu được mã hóa. Thay vào đó, HMAC chịu trách nhiệm về Mã xác thực thư dựa trên hàm băm, mã này băm các khóa và giá trị để tạo hàm băm cuối cùng

Bạn có thể muốn mã hóa và giải mã dữ liệu cho mục đích truyền tải. Đây là nơi các hàm

npm install crypto --save
4 và
npm install crypto --save
5 xuất hiện. Bạn mã hóa dữ liệu bằng một
npm install crypto --save
4 và giải mã nó bằng một
npm install crypto --save
5. Ngoài ra, bạn có thể muốn mã hóa dữ liệu trước khi lưu trữ trong cơ sở dữ liệu

Để xác minh mật khẩu được mã hóa hoặc băm. Tốt nhất là nên có chức năng

npm install crypto --save
8. Hãy để chúng tôi khám phá mã hóa và giải mã dữ liệu và triển khai Node. ứng dụng js sử dụng crypto

Bắt đầu với một nút. dự án js

Chúng ta sẽ tạo một Node. dự án js để làm việc với crypto. Bạn sẽ học cách mã hóa và giải mã dữ liệu. Để bắt đầu, hãy thực hiện lệnh này

npm init -y

Theo mặc định, mô-đun crypto là một Nút được xây dựng sẵn. thư viện js. Nhưng nếu nút. js được cài đặt thủ công, crypto có thể không được gửi cùng với nó. Để cài đặt, thực hiện lệnh sau

npm install crypto --save

Bạn không cần thực thi lệnh nếu crypto được cài đặt bằng các gói dựng sẵn

Cách mã hóa dữ liệu trong Node. js

Để bắt đầu, hãy tạo tệp

const crypto = require ("crypto");
4 và xác định các chức năng mã hóa của chúng tôi như hình bên dưới

Trước tiên, bạn sẽ nhập mô-đun crypto

const crypto = require ("crypto");

Trong khi mã hóa dữ liệu, điều quan trọng là sử dụng thuật toán. Trong dự án này, chúng tôi sử dụng

const crypto = require ("crypto");
6

Phương pháp

const crypto = require ("crypto");
7 được sử dụng để tạo dữ liệu ngẫu nhiên được tạo bằng mật mã được tạo trong mã viết

const crypto = require ("crypto");
8 (vectơ khởi tạo) được sử dụng ở đây để chứa 16 byte dữ liệu ngẫu nhiên từ phương thức
const crypto = require ("crypto");
9 và
// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);
0 chứa 32 byte dữ liệu ngẫu nhiên

// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);

Để mã hóa dữ liệu, hàm

npm install crypto --save
4 được sử dụng. Chức năng
npm install crypto --save
4 của dự án của chúng tôi được thực hiện bằng cách sử dụng
// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);
3, vectơ khởi tạo từ mô-đun crypto

Truyền đối số đầu tiên làm thuật toán chúng ta đang sử dụng, đối số thứ hai là

// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);
0 và
const crypto = require ("crypto");
8 làm đối số thứ ba

Để mã hóa tin nhắn, hãy sử dụng phương pháp

// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);
7 trên
npm install crypto --save
4. Chuyển đối số đầu tiên dưới dạng
// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);
9, đối số thứ hai là
// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);

// the cipher function
const cipher = crypto.createCipheriv(algorithm, Securitykey, initVector);

// encrypt the message
// input encoding
// output encoding
let encryptedData = cipher.update(message, "utf-8", "hex");
0 (mã hóa đầu vào) và
// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);

// the cipher function
const cipher = crypto.createCipheriv(algorithm, Securitykey, initVector);

// encrypt the message
// input encoding
// output encoding
let encryptedData = cipher.update(message, "utf-8", "hex");
1 (mã hóa đầu ra) làm đối số thứ ba

// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);

// the cipher function
const cipher = crypto.createCipheriv(algorithm, Securitykey, initVector);

// encrypt the message
// input encoding
// output encoding
let encryptedData = cipher.update(message, "utf-8", "hex");

Đoạn mã yêu cầu

npm install crypto --save
4 dừng mã hóa bằng phương pháp
// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);

// the cipher function
const cipher = crypto.createCipheriv(algorithm, Securitykey, initVector);

// encrypt the message
// input encoding
// output encoding
let encryptedData = cipher.update(message, "utf-8", "hex");
3. Khi phương thức
// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);

// the cipher function
const cipher = crypto.createCipheriv(algorithm, Securitykey, initVector);

// encrypt the message
// input encoding
// output encoding
let encryptedData = cipher.update(message, "utf-8", "hex");
3 được gọi, không thể sử dụng phương thức
npm install crypto --save
4 một lần nữa để mã hóa dữ liệu

Sau đó, tin nhắn được mã hóa và những kẻ tấn công nguy hiểm không thể hiểu được dữ liệu được mã hóa. Dưới đây là một ví dụ về cách mã hóa dữ liệu

// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);

// the cipher function
const cipher = crypto.createCipheriv(algorithm, Securitykey, initVector);

// encrypt the message
// input encoding
// output encoding
let encryptedData = cipher.update(message, "utf-8", "hex");

encryptedData += cipher.final("hex");

console.log("Encrypted message: " + encryptedData);

Đây là đầu ra

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

Cách giải mã dữ liệu trong Node. js

Giải mã dữ liệu theo một định dạng tương tự như mã hóa dữ liệu. Trong nút của chúng tôi. js, chúng ta sẽ sử dụng hàm

npm install crypto --save
5 để giải mã dữ liệu. Vì vậy, dự án của chúng tôi mã hóa và giải mã dữ liệu

Dưới đây là một ví dụ về cách giải mã dữ liệu

// the decipher function
const decipher = crypto.createDecipheriv(algorithm, Securitykey, initVector);

let decryptedData = decipher.update(encryptedData, "hex", "utf-8");

decryptedData += decipher.final("utf8");

console.log("Decrypted message: " + decryptedData);

Thực hiện theo ví dụ dưới đây để mã hóa và giải mã dữ liệu bằng tiền điện tử

// crypto module
const crypto = require("crypto");

const algorithm = "aes-256-cbc"; 

// generate 16 bytes of random data
const initVector = crypto.randomBytes(16);

// protected data
const message = "This is a secret message";

// secret key generate 32 bytes of random data
const Securitykey = crypto.randomBytes(32);

// the cipher function
const cipher = crypto.createCipheriv(algorithm, Securitykey, initVector);

// encrypt the message
// input encoding
// output encoding
let encryptedData = cipher.update(message, "utf-8", "hex");

encryptedData += cipher.final("hex");

console.log("Encrypted message: " + encryptedData);

// the decipher function
const decipher = crypto.createDecipheriv(algorithm, Securitykey, initVector);

let decryptedData = decipher.update(encryptedData, "hex", "utf-8");

decryptedData += decipher.final("utf8");

console.log("Decrypted message: " + decryptedData);

Đây là đầu ra

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

kết thúc

Bài viết này đã xem xét mã hóa và giải mã dữ liệu trong Node. js sử dụng mô-đun crypto. Ngoài ra, nó chạm vào

  • Mật mã trong nút. js
  • Nút. mô-đun mật mã js

Tôi hy vọng bạn đã có được kiến ​​thức vững chắc về mã hóa và giải mã cũng như cách sử dụng mô-đun crypto trong Node. js để thực hiện mã hóa và giải mã

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

Để mã hóa và giải mã đối tượng JavaScript theo nghĩa đen, chỉ cần sử dụng hàm mã hóa() và giải mã() từ một phiên bản . Điều này sẽ sử dụng thuật toán mã hóa AES-CBC.

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

Mã hóa đối tượng .
dữ liệu var = [{ foo. thanh}, { thanh. foo}];
var ciphertext = CryptoJS. AES. mã hóa (JSON. stringify(dữ liệu), 'khóa bí mật 123');
var byte = CryptoJS. AES. giải mã (bản mã. toString(), 'khóa bí mật 123');
var decryptedData = JSON. phân tích cú pháp (byte. toString(CryptoJS. enc. UTF8));

Làm cách nào để giải mã mã 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);

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

Để mã hóa phía máy khách, bạn phải sử dụng hai javascript. Trong biểu mẫu này, tôi đã tạo một trường mật khẩu và một trường ẩn. Trường ẩn được sử dụng để giữ giá trị của mật khẩu thực. Trong javascript trên, tôi đã tạo một hàm mã hóa() .