Tạo khóa từ mật khẩu
Thuộc phần Xác thực và bảo mật trong hành trình Node.js của Coddy. Bài học 2 trên 24.
Khóa mật khẩu được tính từ mật khẩu và muối. Khác với mã hóa, phép tính này không được thiết kế để đảo ngược. Scrypt khiến việc đoán mật khẩu trở nên tốn kém vì mỗi lần thử đều cần xử lý. Với cùng mật khẩu, muối và các thiết lập dẫn xuất, bao gồm cả độ dài khóa, bạn sẽ luôn tạo ra cùng một khóa. Khóa được dẫn xuất này thường được gọi là hàm băm mật khẩu.
const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');Đối số thứ ba là độ dài khóa tính bằng byte. Hàm hỗ trợ được cung cấp dùng promisify để chuyển scrypt dựa trên callback của Node thành một hàm trả về promise. Bạn có thể dùng await với hàm này như khi đọc tệp. Muối cố định trong phần luyện tập này giúp bạn so sánh kết quả; khi lưu mật khẩu trong thực tế, hãy dùng một muối ngẫu nhiên mới.
Phần luyện tập tiếp theo sẽ tạo muối ngẫu nhiên mới cần thiết khi lưu mật khẩu mới.
Thử thách
DễĐây là một dự án luyện tập nhỏ. Phần thiết lập đã có sẵn, chỉ chỉnh sửa exercise.js.
Hoàn thiện hàm (function): tạo khóa dài 32 byte từ mật khẩu và salt được cung cấp, sau đó trả về chuỗi hex của khóa đó trong key. Gửi {"password":"practice","salt":"fixed-for-this-exercise"} hai lần bằng POST đến /result: cùng một khóa dài 64 ký tự sẽ xuất hiện. Thay đổi một trong hai đầu vào thì khóa cũng thay đổi.
Tự làm thử
import { scryptAsync } from './crypto.js';
export async function exercise({ password, salt }) {
return { key: password };
}
Tất cả bài học trong Xác thực và bảo mật
1Mật khẩu
Byte và văn bản hexTạo khóa từ mật khẩuSalt mớiKhông bao giờ lưu mật khẩuSo sánh các byte của khóaKiểm tra mật khẩuQuy tắc đăng ký2Phiên làm việc và cookie
Ghi nhớ bằng cookieTra cứu phiênPhiên đăng nhậpĐịnh tuyến sau khi đăng nhậpTự luyện tập: Playground Express