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à: