JavaScript có được sử dụng trong mật mã không?

Kỷ luật bí ẩn của mật mã là xương sống của Internet. Không có nó, sẽ không có bí mật và không có sự riêng tư trong thế giới kỹ thuật số. Là nhà phát triển, bạn không cần phải hiểu toán học liên quan đến mật mã, nhưng việc biết các khái niệm chính như hàm băm, muối, cặp khóa, mã hóa và ký là vô cùng cần thiết

Hướng dẫn sau đây giải thích các khái niệm mật mã thiết yếu và triển khai chúng với Nút dựng sẵn. mô-đun mật mã js

1. Băm

Từ băm thực sự có nguồn gốc ẩm thực. Nó có nghĩa là cắt và trộn và điều đó mô tả hoàn hảo chức năng của hàm băm. Nó nhận một giá trị đầu vào có độ dài bất kỳ và xuất ra một giá trị độ dài cố định. Các thuật toán băm, như SHA (Thuật toán băm an toàn), tạo ra một chuỗi ngẫu nhiên, duy nhất, có độ dài cố định từ một đầu vào nhất định. Chúng thường được sử dụng để so sánh hai giá trị, chẳng hạn như mật khẩu, về sự bình đẳng

  • Cùng một đầu vào sẽ luôn tạo ra cùng một đầu ra
  • Tính toán nhanh, nhưng tính toán tốn kém để tìm đầu vào ban đầu
  • Xác suất va chạm nhỏ (duy nhất)
JavaScript có được sử dụng trong mật mã không?

sơ đồ hàm băm

Tạo một Hash trong Node. js

Tạo một hàm băm bằng mô-đun mật mã, sau đó sử dụng nó để so sánh hai giá trị

file_type_js băm. js

const { createHash } = require('crypto');

// Create a string hash

function hash(str) {
    return createHash('sha256').update(str).digest('hex');
}

// Compare two hashed passwords

let password = 'hi-mom!';
const hash1 = hash(password);
console.log(hash1)

/// .. some time later

password = 'hi-mom';
const hash2 = hash(password);
const match = hash1 === hash2;

console.log(match ? '✔️  good password' : '❌  password does not match');

2. Muối

Băm rất tốt để làm cho mật khẩu không thể đọc được, nhưng vì chúng luôn tạo ra cùng một đầu ra nên chúng không an toàn lắm. Muối là một chuỗi ngẫu nhiên được thêm vào đầu vào trước khi băm. Điều này làm cho hàm băm trở nên độc đáo hơn và khó đoán hơn

Người dùng thường sử dụng mật khẩu yếu, như “password123”. Khi cơ sở dữ liệu bị xâm phạm, kẻ tấn công có thể dễ dàng tìm thấy giá trị của một hàm băm không được thêm muối bằng cách tìm kiếm bảng cầu vồng được tính toán trước của các hàm băm phổ biến - cách tạo muối khắc phục điều này

  • Được sử dụng để làm cho hàm băm khó đoán hơn
  • Nối một chuỗi ngẫu nhiên vào đầu vào trước khi băm
JavaScript có được sử dụng trong mật mã không?

sơ đồ muối

Mật khẩu muối với Scrypt trong nút. js

Dưới đây là một ví dụ về muối mật khẩu sử dụng thuật toán scrypt trong Node crypto

file_type_js muối. js

const { scryptSync, randomBytes, timingSafeEqual } = require('crypto');

function signup(email, password) {
    const salt = randomBytes(16).toString('hex');
    const hashedPassword = scryptSync(password, salt, 64).toString('hex');

    const user = { email, password: `${salt}:${hashedPassword}` }
  
    users.push(user);

    return user
}

function login(email, password) {
    const user = users.find(v => v.email === email);
  
    const [salt, key] = user.password.split(':');
    const hashedBuffer = scryptSync(password, salt, 64);
  
    const keyBuffer = Buffer.from(key, 'hex');
    const match = timingSafeEqual(hashedBuffer, keyBuffer);
    
    if (match) {
        return 'login success!'
    } else {
        return 'login fail!'
    }
}

const users = [];

const user = signup('[email protected]', 'pa$$word');

console.log(user)

const result = login('[email protected]', 'password')

console.log(result)

3. HMAC

HMAC là hàm băm dữ liệu có khóa - giống như hàm băm có mật khẩu. Để tạo HMAC, bạn cần có khóa, do đó cho phép bạn xác minh cả tính xác thực và nguồn gốc của dữ liệu. Sử dụng một khóa khác sẽ tạo ra một đầu ra khác

  • Hãy nghĩ về HMAC như một hàm băm với mật khẩu hoặc khóa
  • Chỉ ai đó có khóa mới có thể tạo hàm băm xác thực
JavaScript có được sử dụng trong mật mã không?

sơ đồ hmac

HMAC trong nút. js

file_type_js hmac. js

const { createHmac } = require('crypto');

const password = 'super-secret!';
const message = '🎃 hello jack'

const hmac = createHmac('sha256', password).update(message).digest('hex');

console.log(hmac)

4. Mã hóa đối xứng

Mã hóa là quá trình làm cho một tin nhắn trở nên bí mật (như hàm băm), đồng thời cho phép nó có thể đảo ngược (giải mã) bằng khóa thích hợp. Mỗi khi một tin nhắn được mã hóa, nó sẽ được ngẫu nhiên hóa để tạo ra một đầu ra khác nhau. Trong mã hóa đối xứng, cùng một khóa được sử dụng để mã hóa và giải mã tin nhắn

  • Cùng một đầu vào sẽ tạo ra một đầu ra khác, không giống như băm
  • Tin nhắn được mã hóa có thể được đảo ngược bằng khóa
  • Cùng một khóa được sử dụng để mã hóa và giải mã tin nhắn
JavaScript có được sử dụng trong mật mã không?

sơ đồ mã hóa đối xứng

Mã hóa đối xứng trong nút. js

Thực hiện mã hóa đối xứng trong Node bằng cách tạo mật mã. Quá trình mã hóa cũng có một vectơ khởi tạo (IV) để ngẫu nhiên hóa mẫu sao cho một chuỗi văn bản sẽ không tạo ra cùng một đầu ra như một chuỗi trước đó

file_type_js mã hóa đối xứng. js

const { createCipheriv, randomBytes, createDecipheriv } = require('crypto');

/// Cipher

const message = 'i like turtles';
const key = randomBytes(32);
const iv = randomBytes(16);

const cipher = createCipheriv('aes256', key, iv);

/// Encrypt

const encryptedMessage = cipher.update(message, 'utf8', 'hex') + cipher.final('hex');
console.log(`Encrypted: ${encryptedMessage}`);

/// Decrypt

const decipher = createDecipheriv('aes256', key, iv);
const decryptedMessage = decipher.update(encryptedMessage, 'hex', 'utf-8') + decipher.final('utf8');
console.log(`Deciphered: ${decryptedMessage.toString('utf-8')}`);

5. Bàn phím

Sử dụng khóa dùng chung để mã hóa hoạt động, nhưng vấn đề là cả hai bên phải đồng ý về khóa. Đây là một vấn đề trong thế giới thực vì nó không thực tế hoặc không an toàn để chia sẻ qua mạng. Giải pháp là sử dụng thuật toán như RSA để tạo cặp khóa chứa khóa chung và khóa riêng. Như tên của chúng chỉ ra, khóa riêng phải được giữ bí mật, trong khi khóa chung có thể được chia sẻ tự do

JavaScript có được sử dụng trong mật mã không?

sơ đồ cặp khóa

Tạo một cặp khóa RSA trong nút. js

file_type_js cặp khóa. js

const { generateKeyPairSync } = require('crypto');

const { privateKey, publicKey } = generateKeyPairSync('rsa', {
  modulusLength: 2048, // the length of your key in bits
  publicKeyEncoding: {
    type: 'spki', // recommended to be 'spki' by the Node.js docs
    format: 'pem',
  },
  privateKeyEncoding: {
    type: 'pkcs8', // recommended to be 'pkcs8' by the Node.js docs
    format: 'pem',
  },
});

console.log(publicKey);
console.log(privateKey);

6. Mã hóa bất đối xứng

Mã hóa bất đối xứng phụ thuộc vào hai khóa. Mã hóa tin nhắn bằng khóa chung và giải mã bằng khóa riêng

Mã hóa bất đối xứng được sử dụng trên web bất cứ khi nào bạn sử dụng HTTPS để thiết lập kết nối được mã hóa tới trang web đó. Trình duyệt tìm khóa chung của chứng chỉ SSL được cài đặt trên trang web, được sử dụng để mã hóa bất kỳ dữ liệu nào bạn gửi, sau đó khóa riêng sẽ giải mã nó

JavaScript có được sử dụng trong mật mã không?

sơ đồ mã hóa bất đối xứng

Mã hóa RSA trong nút. js

file_type_js mã hóa bất đối xứng. js

const {  publicEncrypt, privateDecrypt } = require('crypto');
const { publicKey, privateKey } = require('./keypair');


const encryptedData = publicEncrypt(
    publicKey,
    Buffer.from(secretMessage)
  );


console.log(encryptedData.toString('hex'))


const decryptedData = privateDecrypt(
    privateKey,
    encryptedData
);

console.log(decryptedData.toString('utf-8'));

7. ký tên

Ký là quá trình tạo chữ ký số của một thông điệp. Chữ ký là một hàm băm của tin nhắn gốc, sau đó được mã hóa bằng khóa riêng của người gửi

Chữ ký có thể được xác minh bởi người nhận bằng khóa công khai của người gửi. Điều này có thể đảm bảo tin nhắn gốc là xác thực và không bị sửa đổi

JavaScript có tốt cho mật mã không?

thư viện mã hóa js là một công cụ có giá trị cho Node. các nhà phát triển js cần thực hiện các thao tác mã hóa trong ứng dụng của họ . Nó cung cấp một loạt các tính năng và dễ sử dụng, khiến nó trở thành lựa chọn phổ biến để triển khai mật mã trong Node. ứng dụng js.

Mật mã trong JavaScript là gì?

Crypto-JS là tập hợp ngày càng nhiều các thuật toán mã hóa tiêu chuẩn và an toàn được triển khai trong JavaScript bằng cách sử dụng các mẫu và phương pháp hay nhất . Chúng nhanh và có giao diện nhất quán và đơn giản. thuật toán. MD5, SHA-1, SHA-256, AES, DES, Rabbit, MARC4, HMAC (HMAC-MD5, HMAC-SHA1, HMAC-SHA256) PBKDF2.

Phần mềm nào được sử dụng để mã hóa?

Boxcryptor . Boxcryptor là một trong những phần mềm mã hóa tốt nhất hiện nay. Nó cung cấp mã hóa đầu cuối cho các dịch vụ lưu trữ đám mây.

JavaScript có mã hóa tích hợp không?

js có một thư viện tích hợp có 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 để mã hóa và giải mã dữ liệu trong các ứng dụng của bạn.