Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Phương thức crypto.scrypt() trong Node.js


Phương thức crypto.scrypt() cung cấp triển khai bất đồng bộ cho scrypt. Scrypt là hàm dẫn xuất khóa dựa trên mật khẩu (password-based key derivation function) bảo vệ hệ thống khỏi tấn cứu brute-force bằng cách làm cho việc tấn công trở nên tốn kém về mặt tính toán và bộ nhớ.

Cú pháp

crypto.scrypt(password, salt, keylen, [options], [callback])

Tham số

  • password – Mật khẩu cho scrypt. Kiểu: string, object, TypedArray, v.v.

  • salt – Giá trị muối (salt), nên duy nhất nhất có thể. Dùng để mã hóa dữ liệu. Độ dài tối thiểu khuyến nghị: 16 byte.

  • keylen – Độ dài khóa, kiểu số.

  • options – Các tùy chọn:

    • cost – Chi phí CPU/bo nhớ. Phải là lũy thừa của 2 lớn hơn 1. Mặc định: 16384.

    • blockSize – Kích thước khối. Mặc định: 8.

    • parallelization – Độ song song. Mặc định: 1.

    • N – Bí danh cho cost. Chỉ dùng một trong hai.

    • r – Bí danh cho blockSize.

    • p – Bí danh cho parallelization.

    • maxmem – Giới hạn bộ nhớ tối đa. Lỗi nếu 128*N*r > maxmem. Mặc định: 32*1024*1024.

  • callback – Hàm gọi khi có lỗi.

Ví dụ

Tạo file scrypt.js và sao chép mã. Chạy lệnh:

node scrypt.js

scrypt.js

// Chương trình Node.js minh họa crypto.scrypt()
// Import module crypto
var crypto = require('crypto');

// Gọi scrypt() với các tham số
crypto.scrypt('tutorialspoint', 'asdfghjkl', 32, (err, derivedKey) => {
    if (err) throw err;
    // In khóa dẫn xuất dạng buffer
    console.log("Khóa dẫn xuất (1) là:", derivedKey);
});

// Gọi scrypt() với option cost
crypto.scrypt('GeeksforGeeks', 'tfytdx', 128, { N: 512 }, (err, derivedKey) => {
    if (err) throw err;
    console.log("Khóa dẫn xuất (2) là:", derivedKey);
    console.log();
});

Kết quả

C:\home\node>> node scrypt.js
Khóa dẫn xuất (2) là: 
Khóa dẫn xuất (1) là: 

Ví dụ 2

Ví dụ với salt là TypedArray và DataView.

// Chương trình Node.js minh họa crypto.scrypt()
// Import module crypto
var crypto = require('crypto');

// Khởi tạo salt là TypedArray
const salt = new Uint32Array(7);
// Dùng scrypt()
crypto.scrypt('WelcomeTutorialspoint', salt, 16, (err, derivedKey) => {
    if (err) throw err;
    // In khóa dạng chuỗi ascii
    console.log("Khóa dẫn xuất (1) là:", derivedKey.toString("ascii"));
});

// Khởi tạo salt là DataView
const newSalt = new DataView(new ArrayBuffer(5));
// Dùng scrypt() với cost
crypto.scrypt('HelloTutorialspoint', newSalt, 16, { N: 32 }, (err, derivedKey) => {
    if (err) throw err;
    // In khóa dạng base64
    console.log("Khóa dẫn xuất (2) là:", derivedKey.toString("base64"));
});

Kết quả

C:\home\node>> node scrypt.js
Khóa dẫn xuất (2) là: PBYDRlgayLVGjC8z3YUcSQ==
Khóa dẫn xuất (1) là: