Bạn định nghĩa CryptoJS như thế nào?

Mã hóa trong môi trường JavaScript là trọng tâm chính của việc giữ an toàn cho thông tin cá nhân thông qua các thuật toán nhị phân. Thông qua quá trình xáo trộn các chuỗi và số nguyên, các thuật toán này tuân theo một kết quả phù hợp nhất để bảo vệ chống lại tin tặc

Tuy nhiên, các nhà phát triển có xu hướng không tự mã hóa thông tin cá nhân trong các ứng dụng web của họ do sự tẻ nhạt và không an toàn đi kèm với nó. Thay vào đó, hầu hết có xu hướng chuyển sang một thư viện làm việc cho họ theo cách có kinh nghiệm hơn, nhưng vấn đề với các thư viện này là chúng tiếp tục làm phức tạp hóa thực tiễn. Đây là lúc quá trình đơn giản hóa tiến thêm một bước và Crypto-JS ra đời

Crypto-JS là một thư viện mật mã nhằm thực thi các thuật toán theo phương pháp thực hành tốt nhất có nghĩa là được cô đọng trong việc sử dụng đơn giản hóa các lệnh gọi lớp/phương thức

Hôm nay tôi sẽ trình bày một bản demo giới thiệu các tính năng mà Crypto-JS có thể mang lại để bảo mật ứng dụng web tiếp theo của bạn. Bắt đầu nào

Mã hóa một chuỗi

Điều chúng ta sẽ đề cập trước tiên là cách sử dụng các chức năng cơ bản từ Crypto-JS để tạo một mảng ký tự được mã hóa. Chúng ta có thể hoàn thành nhiệm vụ này bằng cách trình bày cách mã hóa một chuỗi cơ bản.

Hàm băm cơ bản, chẳng hạn như các biến thể được liệt kê ở trên, thông thường sẽ yêu cầu phương thức toString được đính kèm ở phía sau để xem hàm băm chuỗi được tạo. Thông thường các chuỗi này sẽ trông giống như thế này

Raw: {[Array]}
Stringified: 78e731027d8fd50ed642340b7c9a63b3

Hàm băm này vẫn có thể được mã hóa hơn nữa. Bằng cách áp dụng một phương pháp bổ sung được gọi là enc, chúng tôi có thể mã hóa hàm băm thành bất kỳ định dạng nào chúng tôi mong muốn. Vì lợi ích của bài thuyết trình này, tôi sẽ chứng minh sử dụng Base64

Tạo mật mã

Trước khi chúng tôi đi thẳng vào giải mã, có một chi tiết quan trọng cần được thảo luận. Băm KHÔNG THỂ được giải mã sau khi được tạo. Để giải mã một hàm băm, trước tiên chúng phải được xác định bằng một bí mật bằng cách sử dụng mật mã. Mật mã được sử dụng tốt nhất khi xử lý các hàm băm được mã hóa cần được so sánh với hàm băm khác

Bây giờ nếu muốn, chúng tôi có thể thêm các tùy chọn bổ sung như muối để mã hóa thêm bản mã của mình để tăng cường bảo mật hoặc xử lý hàm băm lũy tiến, kết hợp kết quả của 2 hàm băm trở lên để tạo bản mã. Nhưng vì lợi ích của blog này, chúng tôi giữ cho nó đơn giản

Giải mã mật mã được mã hóa

Bây giờ chúng ta đã tìm hiểu cách tạo hàm băm cơ bản và mã hóa hàm băm đó bằng cách sử dụng mật mã, hãy nói về điều ngược lại; . Giải mã, như đã nêu trước đó, chỉ có thể được áp dụng cho mật mã vì mật mã được duy trì và có thể được gọi với chuỗi bí mật xác định chúng. Hãy giải mã bản mã mà chúng ta đã tạo trước đó

Và bùm. Mật mã được tạo trước đó được truy xuất dựa trên bí mật được gán được giải mã trở lại dạng chuỗi ban đầu. Bây giờ nếu muốn, chúng tôi có thể giải mã bản mã của mình thành bất kỳ định dạng nào, chẳng hạn như base64, ASCII hoặc thậm chí là nhị phân để đặt tên cho một số

Phần kết luận

Thông qua quá trình đọc bài viết này, chúng tôi đã đề cập chính xác những gì Crypto-JS làm với tư cách là một thư viện và đề cập đến cách tạo hàm băm ở bốn dạng khác nhau. Ngoài ra, chúng tôi đã trình bày cách mã hóa chuỗi bằng mật mã và giải mã bản mã trở lại thành chuỗi. Hy vọng rằng bài viết này đã làm sáng tỏ thế giới mã hóa và bạn đã rời khỏi bài viết này để học hỏi nhiều hơn là tham gia

Javascript hỗ trợ mọi ứng dụng web hiện đại. Các ứng dụng web bảo mật có thể thực hiện mã hóa và giải mã như thế nào?

Andrew MilichNgày 10 tháng 12 năm 2022

Mã hóa được sử dụng bởi hầu hết mọi ứng dụng trên internet ngày nay. Từ mã hóa dữ liệu bên trong cơ sở dữ liệu, đến mã hóa mạng được sử dụng trong SSL/TLS [mọi https. trang web], đến mã hóa đầu cuối bên trong các sản phẩm liên lạc và nhắn tin an toàn, sự đa dạng của các thuật toán, quy trình mã hóa và mật mã hiện cung cấp năng lượng cho ngăn xếp web hiện đại

Tổng quan và từ vựng

Dưới đây, chúng tôi sẽ xác định một vài chủ đề được sử dụng xuyên suốt blog

mã hóa đối xứng. Một loại mã hóa trong đó cùng một khóa được sử dụng để mã hóa và giải mã một tin nhắn

mã hóa bất đối xứng. Một loại mã hóa trong đó hai khóa khác nhau được sử dụng để mã hóa và giải mã một tin nhắn

băm. Hàm mật mã [“hàm băm”] tạo ra đầu ra có kích thước cố định [được gọi là hàm băm] từ đầu vào có kích thước bất kỳ. Băm thường được sử dụng để xác minh tính toàn vẹn của dữ liệu

mã hóa. Một quá trình chuyển đổi dữ liệu sang một định dạng khác bằng một thuật toán cụ thể. Mã hóa thường được sử dụng để chuyển đổi dữ liệu sang định dạng hiệu quả hơn cho việc lưu trữ hoặc truyền tải. Nó không phải là một dạng mã hóa và không cung cấp bất kỳ lợi ích bảo mật nào

Mã hóa và giải mã trong Javascript

Mã hóa và giải mã là những khái niệm quan trọng trong lĩnh vực khoa học máy tính và bảo mật thông tin. Mã hóa là quá trình chuyển đổi văn bản thuần túy [i. e. văn bản thông thường, có thể đọc được] thành bản mã [i. e. văn bản bị xáo trộn, không thể đọc được] bằng thuật toán toán học và khóa bí mật. Giải mã là quá trình đảo ngược chuyển đổi bản mã trở lại thành văn bản thuần túy sử dụng cùng một thuật toán và khóa

Trong Javascript, mã hóa và giải mã thường được triển khai bằng một trong số các thuật toán phổ biến, chẳng hạn như Tiêu chuẩn mã hóa nâng cao [AES] hoặc thuật toán RSA. Thuật toán cụ thể được sử dụng tùy thuộc vào nhu cầu của ứng dụng và yêu cầu bảo mật của dữ liệu được mã hóa

Để minh họa cách mã hóa và giải mã hoạt động trong Javascript, hãy xem xét một ví dụ đơn giản sử dụng thuật toán AES. Trong ví dụ này, chúng tôi sẽ sử dụng khóa bí mật là "12345" và một tin nhắn văn bản đơn giản là "Xin chào, thế giới. "

Trước tiên, chúng ta cần nhập các thư viện cần thiết để mã hóa AES. Trong trường hợp này, chúng tôi sẽ sử dụng thư viện "crypto-js", thư viện này có thể được cài đặt vào các phần phụ thuộc của dự án bằng lệnh NPM sau

npm cài đặt crypto-js

Lưu ý rằng nếu bạn thích sử dụng sợi, lệnh “yar add crypto-js” cũng sẽ hoạt động. Sau khi thư viện được cài đặt, chúng tôi có thể nhập nó vào mã Javascript của mình bằng dòng mã sau

const CryptoJS = require["crypto-js"];

Tiếp theo, chúng ta cần xác định khóa bí mật và tin nhắn văn bản thuần túy. Trong ví dụ này, chúng tôi sẽ sử dụng khóa và thông báo được xác định trước đó

khóa const = "12345";
const plainText = "Chào thế giới. “;

Với khóa và văn bản thuần túy được xác định, giờ đây chúng ta có thể mã hóa tin nhắn bằng thuật toán AES và chức năng mã hóa CryptoJS. Trong Javascript, điều này được thực hiện bằng đoạn mã sau

const được mã hóa = CryptoJS. AES. mã hóa [văn bản gốc, khóa];

Tin nhắn được mã hóa được trả về dưới dạng một chuỗi bản mã, không thể đọc được đối với bất kỳ ai không có khóa bí mật. Ví dụ: văn bản được mã hóa trong trường hợp này có thể trông giống như thế này

U2FsdGVkX18cwq3S7v2bT+E9T9XkTfH4D4Gp+gWZFok=

Để giải mã bản mã trở lại 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 đã giải mã = ​​CryptoJS. AES. giải mã [được mã hóa, khóa];

Dòng này sử dụng bản mã được mã hóa và khóa bí mật để giải mã tin nhắn trở lại thành văn bản gốc ban đầu [“Xin chào, thế giới. ”]. Trong một số trường hợp, các chức năng mã hóa hoặc giải mã yêu cầu một số mã hóa văn bản nhất định, chẳng hạn như hex hoặc utf8, mỗi mã hóa sử dụng các bộ ký tự khác nhau để biểu thị dữ liệu

Mã hóa AES, được sử dụng ở đây, là một thuật toán mã hóa đối xứng trong đó cùng một khóa bí mật được sử dụng để mã hóa và giải mã văn bản

Trong mã hóa bất đối xứng, các khóa khác nhau được sử dụng để mã hóa văn bản thuần túy [khóa chung] và giải mã văn bản mật mã [khóa riêng]

Thư viện tiền điện tử NodeJS

Nút. js là môi trường thời gian chạy để thực thi mã JavaScript ở phía máy chủ. Nút. js bao gồm một thư viện tích hợp có tên là crypto cung cấp một số chức năng mã hóa, bao gồm các chức năng tạo hàm băm, ký và xác minh chữ ký số cũng như tạo số ngẫu nhiên

Web Cryptography API, hay WebCrypto, là một API JavaScript cung cấp chức năng mã hóa tương tự như thư viện tiền điện tử trong Node. js. WebCrypto được thiết kế để sử dụng trong các ứng dụng web và cho phép các nhà phát triển thực hiện các thao tác mã hóa trực tiếp trong trình duyệt. Điều này có thể hữu ích để triển khai các tính năng bảo mật như băm mật khẩu và mã hóa dữ liệu nhạy cảm mà không phải gửi dữ liệu đến máy chủ để xử lý

Cả thư viện crypto trong Node. js và API WebCrypto cung cấp một bộ công cụ mạnh mẽ để triển khai các chức năng mã hóa trong ứng dụng web. Tuy nhiên, điều quan trọng là phải sử dụng các công cụ này một cách cẩn thận và an toàn để đảm bảo rằng thông tin nhạy cảm được bảo vệ

Tại sao sử dụng mã hóa?

Mã hóa được sử dụng trong các ứng dụng web để bảo vệ thông tin nhạy cảm như mật khẩu, số thẻ tín dụng và thông tin cá nhân khác khỏi bị chặn và đọc bởi những cá nhân trái phép. Khi người dùng gửi thông tin nhạy cảm đến ứng dụng web, thông tin sẽ được ứng dụng web mã hóa trước khi truyền qua internet. Điều này đảm bảo rằng ngay cả khi thông tin bị chặn bởi bên thứ ba, nó sẽ không thể đọc được và không thể sử dụng được. Mã hóa thông tin nhạy cảm là một biện pháp bảo mật quan trọng giúp giữ an toàn và bảo mật thông tin người dùng

Ví dụ về các ứng dụng sử dụng mã hóa trên web

MetaMask [ví Ethereum]

MetaMask là một tiện ích mở rộng của trình duyệt cho phép người dùng tương tác với chuỗi khối Ethereum từ trình duyệt web của họ. MetaMask sử dụng mã hóa để bảo vệ thông tin nhạy cảm được lưu trữ trong ví của người dùng

Khi người dùng tạo ví bằng MetaMask, họ được yêu cầu chọn mật khẩu. Mật khẩu này được sử dụng để mã hóa các khóa riêng tư của người dùng, được lưu trữ cục bộ trên thiết bị của người dùng. Điều này có nghĩa là khóa riêng của người dùng không thể đọc được nếu không có mật khẩu và do đó được bảo vệ khỏi truy cập trái phép

1Password [Trình quản lý mật khẩu]

1Password là trình quản lý mật khẩu giúp người dùng lưu trữ và quản lý mật khẩu trực tuyến của họ một cách an toàn. 1Password sử dụng mã hóa để bảo vệ thông tin nhạy cảm được lưu trữ trong kho mật khẩu của nó. Khi người dùng tạo tài khoản bằng 1Password, họ được yêu cầu chọn mật khẩu chính. Mật khẩu chính này được sử dụng để mã hóa kho mật khẩu của người dùng, điều đó có nghĩa là thông tin được lưu trữ trong kho sẽ không thể đọc được nếu không có mật khẩu chính

1Password sử dụng kết hợp mã hóa đối xứng và bất đối xứng để bảo vệ thông tin người dùng. Khi người dùng tạo tài khoản lần đầu tiên và đặt mật khẩu chính, 1Password sẽ tạo một khóa mã hóa duy nhất được sử dụng để mã hóa kho mật khẩu của người dùng. Khóa mã hóa này sau đó được mã hóa bằng mật khẩu chính của người dùng và được lưu trữ trên máy chủ của 1Password

Khi người dùng đăng nhập vào 1Password và nhập mật khẩu chính của họ, 1Password sẽ sử dụng khóa mã hóa được mã hóa để giải mã kho mật khẩu của người dùng. Mật khẩu chính của người dùng không bao giờ được gửi đến máy chủ của 1Password và chỉ được sử dụng cục bộ trên thiết bị của người dùng để giải mã khóa mã hóa được mã hóa. Điều này có nghĩa là 1Password có thể bảo vệ thông tin người dùng mà không cần truy cập vào mật khẩu chính của người dùng

Skiff Mail, Lịch, Trang và Drive [bộ email và năng suất]

Skiff là bộ cộng tác và email được mã hóa đầu cuối, ưu tiên quyền riêng tư với thư, lịch, ghi chú cộng tác và các sản phẩm lưu trữ tệp. Tất cả dữ liệu trên Skiff - tin nhắn, tệp, ghi chú và sự kiện lịch - đều được mã hóa nối đầu, nghĩa là chỉ bạn mới có quyền truy cập vào dữ liệu của mình. Khi đăng nhập vào Skiff, thiết bị của bạn sẽ giải mã dữ liệu thành dạng người có thể đọc được

Skiff được sử dụng miễn phí, với các gói trả phí cũng có sẵn. Tương tự như MetaMask và 1Password, mật khẩu được sử dụng để mã hóa thông tin cá nhân khi bạn đăng nhập. Mật khẩu này cũng cho phép bạn truyền và giải mã dữ liệu trên một thiết bị khác, đồng thời giữ cho dữ liệu đó được mã hóa nối đầu

Skiff là một trong những ví dụ tốt nhất về ứng dụng trực quan, thân thiện với người dùng, sử dụng mật mã bên trong trình duyệt và trong Javascript

Tham khảo thêm

Chúng tôi hy vọng blog này hữu ích. Để biết thêm thông tin, hãy xem các sản phẩm của Skiff hoặc trang GitHub. Chúng tôi cũng sẽ chia sẻ các hướng dẫn khác về cách thực hiện mã hóa bất đối xứng trong javascript

Tiền điện tử trong JS là gì?

Giao diện tiền điện tử đại diện cho các tính năng mã hóa cơ bản có sẵn trong ngữ cảnh hiện tại . Nó cho phép truy cập vào trình tạo số ngẫu nhiên mạnh về mật mã và các nguyên hàm mật mã. Ghi chú. Tính năng này có sẵn trong Web Worker.

CryptoJS sha256 là gì?

crypto-js/hmac-sha256 . Trong ví dụ này, một HMAC được thể hiện bằng thuật toán sha256, nhưng mọi thuật toán được hỗ trợ sẽ hoạt động. var hmac = CryptoJS. HmacSHA256["tin nhắn", "khóa bí mật"];An HMAC is a message authentication code that uses a hash algorithm. In this example, an HMAC is demonstrated using the sha256 algorithm, but any supported algorithm will work. var hmac = CryptoJS.HmacSHA256["message", "secretkey"];

Làm cách nào để giải mã bằng CryptoJS?

Đây là ví dụ được trích xuất từ ​​github của thư viện. .
var CryptoJS = require["crypto-js"];
// Mã hóa
var ciphertext = CryptoJS. AES. mã hóa ['tin nhắn của tôi', 'khóa bí mật 123']. toString[];
// Giải mã
byte = CryptoJS. AES. decrypt[bản mã, 'khóa bí mật 123'];
var originalText = byte. toString[CryptoJS. enc. UTF8];

CryptoJS MD5 là gì?

MD5 là hàm băm được sử dụng rộng rãi . Nó được sử dụng trong nhiều ứng dụng bảo mật và cũng thường được sử dụng để kiểm tra tính toàn vẹn của tệp. Mặc dù vậy, MD5 không có khả năng chống va chạm và không phù hợp với các ứng dụng như chứng chỉ SSL hoặc chữ ký điện tử dựa trên thuộc tính này. var băm = CryptoJS.

Chủ Đề