Chuỗi mã hóa Javascript không có thư viện

Nó lấy các đối số của nó làm khóa để mã hóa, một số tham số dành riêng cho thuật toán và dữ liệu để mã hóa (còn được gọi là "bản rõ"). Nó trả về một Promise sẽ được hoàn thành với dữ liệu được mã hóa (còn được gọi là "bản mã")

encrypt(algorithm, key, data)

algorithm

Một đối tượng chỉ định sẽ được sử dụng và bất kỳ tham số bổ sung nào nếu được yêu cầu

  • Để sử dụng , truyền một đối tượng
    function getMessageEncoding() {
      const messageBox = document.querySelector(".rsa-oaep #message");
      let message = messageBox.value;
      let enc = new TextEncoder();
      return enc.encode(message);
    }
    
    function encryptMessage(publicKey) {
      let encoded = getMessageEncoding();
      return window.crypto.subtle.encrypt(
        {
          name: "RSA-OAEP",
        },
        publicKey,
        encoded
      );
    }
    
    0
  • Để sử dụng , truyền một đối tượng
    function getMessageEncoding() {
      const messageBox = document.querySelector(".rsa-oaep #message");
      let message = messageBox.value;
      let enc = new TextEncoder();
      return enc.encode(message);
    }
    
    function encryptMessage(publicKey) {
      let encoded = getMessageEncoding();
      return window.crypto.subtle.encrypt(
        {
          name: "RSA-OAEP",
        },
        publicKey,
        encoded
      );
    }
    
    1
  • Để sử dụng , truyền một đối tượng
    function getMessageEncoding() {
      const messageBox = document.querySelector(".rsa-oaep #message");
      let message = messageBox.value;
      let enc = new TextEncoder();
      return enc.encode(message);
    }
    
    function encryptMessage(publicKey) {
      let encoded = getMessageEncoding();
      return window.crypto.subtle.encrypt(
        {
          name: "RSA-OAEP",
        },
        publicKey,
        encoded
      );
    }
    
    2
  • Để sử dụng , truyền một đối tượng
    function getMessageEncoding() {
      const messageBox = document.querySelector(".rsa-oaep #message");
      let message = messageBox.value;
      let enc = new TextEncoder();
      return enc.encode(message);
    }
    
    function encryptMessage(publicKey) {
      let encoded = getMessageEncoding();
      return window.crypto.subtle.encrypt(
        {
          name: "RSA-OAEP",
        },
        publicKey,
        encoded
      );
    }
    
    3
function getMessageEncoding() {
  const messageBox = document.querySelector(".rsa-oaep #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(publicKey) {
  let encoded = getMessageEncoding();
  return window.crypto.subtle.encrypt(
    {
      name: "RSA-OAEP",
    },
    publicKey,
    encoded
  );
}
4

Một

function getMessageEncoding() {
  const messageBox = document.querySelector(".rsa-oaep #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(publicKey) {
  let encoded = getMessageEncoding();
  return window.crypto.subtle.encrypt(
    {
      name: "RSA-OAEP",
    },
    publicKey,
    encoded
  );
}
5 chứa khóa được sử dụng để mã hóa

function getMessageEncoding() {
  const messageBox = document.querySelector(".rsa-oaep #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(publicKey) {
  let encoded = getMessageEncoding();
  return window.crypto.subtle.encrypt(
    {
      name: "RSA-OAEP",
    },
    publicKey,
    encoded
  );
}
6

Một

function getMessageEncoding() {
  const messageBox = document.querySelector(".rsa-oaep #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(publicKey) {
  let encoded = getMessageEncoding();
  return window.crypto.subtle.encrypt(
    {
      name: "RSA-OAEP",
    },
    publicKey,
    encoded
  );
}
7, một
function getMessageEncoding() {
  const messageBox = document.querySelector(".rsa-oaep #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(publicKey) {
  let encoded = getMessageEncoding();
  return window.crypto.subtle.encrypt(
    {
      name: "RSA-OAEP",
    },
    publicKey,
    encoded
  );
}
8 hoặc một
function getMessageEncoding() {
  const messageBox = document.querySelector(".rsa-oaep #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(publicKey) {
  let encoded = getMessageEncoding();
  return window.crypto.subtle.encrypt(
    {
      name: "RSA-OAEP",
    },
    publicKey,
    encoded
  );
}
9 chứa dữ liệu sẽ được mã hóa (còn được gọi là văn bản gốc)

Một Promise đáp ứng với một

function getMessageEncoding() {
  const messageBox = document.querySelector(".rsa-oaep #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(publicKey) {
  let encoded = getMessageEncoding();
  return window.crypto.subtle.encrypt(
    {
      name: "RSA-OAEP",
    },
    publicKey,
    encoded
  );
}
7 chứa "bản mã"

Lời hứa bị từ chối khi gặp phải các ngoại lệ sau

function getMessageEncoding() {
  const messageBox = document.querySelector(".aes-ctr #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(key) {
  let encoded = getMessageEncoding();
  // counter will be needed for decryption
  counter = window.crypto.getRandomValues(new Uint8Array(16));
  return window.crypto.subtle.encrypt(
    {
      name: "AES-CTR",
      counter,
      length: 64,
    },
    key,
    encoded
  );
}
2
function getMessageEncoding() {
  const messageBox = document.querySelector(".aes-ctr #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(key) {
  let encoded = getMessageEncoding();
  // counter will be needed for decryption
  counter = window.crypto.getRandomValues(new Uint8Array(16));
  return window.crypto.subtle.encrypt(
    {
      name: "AES-CTR",
      counter,
      length: 64,
    },
    key,
    encoded
  );
}
3

Xảy ra khi thao tác được yêu cầu không hợp lệ đối với khóa được cung cấp (e. g. thuật toán mã hóa không hợp lệ hoặc khóa không hợp lệ cho thuật toán mã hóa đã chỉ định)

function getMessageEncoding() {
  const messageBox = document.querySelector(".aes-ctr #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(key) {
  let encoded = getMessageEncoding();
  // counter will be needed for decryption
  counter = window.crypto.getRandomValues(new Uint8Array(16));
  return window.crypto.subtle.encrypt(
    {
      name: "AES-CTR",
      counter,
      length: 64,
    },
    key,
    encoded
  );
}
4
function getMessageEncoding() {
  const messageBox = document.querySelector(".aes-ctr #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(key) {
  let encoded = getMessageEncoding();
  // counter will be needed for decryption
  counter = window.crypto.getRandomValues(new Uint8Array(16));
  return window.crypto.subtle.encrypt(
    {
      name: "AES-CTR",
      counter,
      length: 64,
    },
    key,
    encoded
  );
}
3

Tăng lên khi hoạt động không thành công vì lý do hoạt động cụ thể (e. g. thông số thuật toán có kích thước không hợp lệ hoặc văn bản gốc AES-GCM dài hơn 239−256 byte)

Web Crypto API cung cấp bốn thuật toán hỗ trợ các hoạt động encrypt()

function getMessageEncoding() {
  const messageBox = document.querySelector(".aes-ctr #message");
  let message = messageBox.value;
  let enc = new TextEncoder();
  return enc.encode(message);
}

function encryptMessage(key) {
  let encoded = getMessageEncoding();
  // counter will be needed for decryption
  counter = window.crypto.getRandomValues(new Uint8Array(16));
  return window.crypto.subtle.encrypt(
    {
      name: "AES-CTR",
      counter,
      length: 64,
    },
    key,
    encoded
  );
}
7

Một trong những thuật toán này - RSA-OAEP - là một hệ thống mật mã khóa công khai

Ba thuật toán mã hóa khác ở đây đều là thuật toán đối xứng và tất cả chúng đều dựa trên cùng một mật mã cơ bản, AES (Tiêu chuẩn mã hóa nâng cao). Sự khác biệt giữa chúng là chế độ. Web Crypto API hỗ trợ ba chế độ AES khác nhau

  • CTR (Chế độ truy cập)
  • CBC (Chuỗi khối mật mã)
  • GCM (Chế độ Galois/Bộ đếm)

Bạn nên sử dụng mã hóa được xác thực, bao gồm các kiểm tra để đảm bảo rằng bản mã không bị kẻ tấn công sửa đổi. Xác thực giúp bảo vệ chống lại các cuộc tấn công bằng bản mã đã chọn, trong đó kẻ tấn công có thể yêu cầu hệ thống giải mã các thông báo tùy ý và sử dụng kết quả để suy ra thông tin về khóa bí mật. Mặc dù có thể thêm xác thực vào chế độ CTR và CBC, nhưng chúng không cung cấp tính năng này theo mặc định và khi triển khai tính năng này theo cách thủ công, người ta có thể dễ dàng mắc các lỗi nhỏ nhưng nghiêm trọng. GCM cung cấp xác thực tích hợp và vì lý do này, nó thường được khuyến nghị hơn hai chế độ AES khác

Hệ thống mã hóa khóa công khai RSA-OAEP được chỉ định trong RFC 3447

Điều này đại diện cho AES trong Chế độ bộ đếm, như được chỉ định trong NIST SP800-38A

AES là một mật mã khối, nghĩa là nó chia thông điệp thành các khối và mã hóa từng khối một. Ở chế độ CTR, mỗi khi một khối tin nhắn được mã hóa, một khối dữ liệu bổ sung sẽ được trộn vào. Khối bổ sung này được gọi là "khối truy cập"

Giá trị khối bộ đếm đã cho không bao giờ được sử dụng nhiều lần với cùng một khóa

  • Với một thông báo dài n khối, một khối truy cập khác phải được sử dụng cho mỗi khối
  • Nếu cùng một khóa được sử dụng để mã hóa nhiều tin nhắn, thì phải sử dụng một khối bộ đếm khác cho tất cả các khối trên tất cả các tin nhắn

Thông thường, điều này đạt được bằng cách chia giá trị khối bộ đếm ban đầu thành hai phần được nối

  • Số nonce (nghĩa là số chỉ được sử dụng một lần). Phần nonce của khối giữ nguyên cho mọi khối trong tin nhắn. Mỗi khi một tin nhắn mới được mã hóa, một nonce mới được chọn. Nonce không cần phải bí mật, nhưng chúng không được sử dụng lại với cùng một khóa
  • một quầy. Phần này của khối được tăng lên mỗi khi một khối được mã hóa

bản chất. nonce phải đảm bảo rằng các khối bộ đếm không được sử dụng lại từ thông báo này sang thông báo tiếp theo, trong khi bộ đếm phải đảm bảo rằng các khối truy cập không được sử dụng lại trong một thông báo

Ghi chú. Xem để biết thêm thông tin

Điều này đại diện cho AES trong Chế độ chuỗi khối mật mã, như được chỉ định trong NIST SP800-38A

Điều này đại diện cho AES trong Chế độ Galois/Bộ đếm, như được chỉ định trong NIST SP800-38D

Một điểm khác biệt chính giữa chế độ này và các chế độ khác là GCM là chế độ "được xác thực", có nghĩa là nó bao gồm các kiểm tra để đảm bảo rằng bản mã không bị kẻ tấn công sửa đổi

Ghi chú. Bạn có thể thử các ví dụ hoạt động trên GitHub

Mã này tìm nạp nội dung của hộp văn bản, mã hóa nó để mã hóa và mã hóa nó bằng AES ở chế độ GCM. Xem mã hoàn chỉnh trên GitHub

Làm cách nào để mã hóa văn bản javascript?

Cách mã hóa và giải mã chuỗi văn bản bằng JavaScript .
const base64Encode = (văn bản) => { const base64data = Tiện ích. base64Encode(văn bản, Tiện ích. bộ ký tự. .
const CryptoJS = require('crypto-js'); . enc. cơ sở64. .
const mã hóaMessage = cCryptoGS. CryptoJS. AES

Làm thế nào để mã hóa chuỗi?

Các bước. .
Nhập khẩu dương xỉ
Sau đó tạo khóa mã hóa, có thể được sử dụng để mã hóa và giải mã
Chuyển đổi chuỗi thành chuỗi byte để có thể mã hóa
Ví dụ lớp Fernet với khóa mã hóa
Sau đó mã hóa chuỗi bằng ví dụ Fernet

Có thể mã hóa một tin nhắn mà không cần chìa khóa?

Bạn không thể mã hóa thứ gì đó nếu không có khóa . Nếu không có khóa, bất kỳ ai cũng có thể khôi phục văn bản thuần túy hoặc không thể khôi phục được đối với mọi người.

Làm cách nào để giải mã SHA256 trong JavaScript?

SHA256 là thuật toán băm. Không thể giải mã được - đó là vấn đề.