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;
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ướiTrướ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"];
6Phươ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ếtconst 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ệuSau đó, 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
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ệuDướ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
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ã