Shifrlash va hashing
Shifrlash - bu ma'lumotni kodlash jarayoni. Bu jarayon ma'lumotning asl ko'rinishi (ya'ni oddiy matn - plaintext) ni shifrlangan matn (ciphertext) deb ataladigan boshqa ko'rinishga
Shifrlash - bu ma'lumotni kodlash jarayoni. Bu jarayon ma'lumotning asl ko'rinishi (ya'ni oddiy matn - plaintext) ni shifrlangan matn (ciphertext) deb ataladigan boshqa ko'rinishga aylantiradi. Ideal holatda, faqat vakolatli tomonlar shifrlangan matnni yana plaintextga qaytarib, asl ma'lumotga kira olishi kerak. Shifrlashning o'zi aralashuvni oldini olmaydi, ammo ehtimoliy ushlab oluvchidan mazmunni tushunish imkonini olib qo'yadi. Shifrlash ikki yo'nalishli funksiya; shifrlangan ma'lumotni to'g'ri kalit bilan qayta yechish mumkin.
Hashing - bu berilgan kalitni boshqa qiymatga aylantirish jarayoni. Yangi qiymat matematik algoritm asosida hash funksiyasi orqali hosil qilinadi. Hashing bajarilgach, natijadan kirish qiymatiga qaytish imkonsiz bo'lishi kerak.
Shifrlash
Node.js crypto deb nomlangan ichki modulni taqdim etadi; u satrlar, sonlar, bufferlar, streamlar va boshqalarni shifrlash hamda yechishda ishlatiladi. Nest keraksiz abstraksiyalarni kiritmaslik uchun bu modul ustidan qo'shimcha paket taqdim etmaydi.
Masalan, AES (Advanced Encryption System) ning 'aes-256-ctr' algoritmi CTR shifrlash rejimidan foydalanamiz.
1import { createCipheriv, randomBytes, scrypt } from 'node:crypto';
2import { promisify } from 'node:util';
3
4const iv = randomBytes(16);
5const password = 'Password used to generate key';
6
7// The key length is dependent on the algorithm.
8// In this case for aes256, it is 32 bytes.
9const key = (await promisify(scrypt)(password, 'salt', 32)) as Buffer;
10const cipher = createCipheriv('aes-256-ctr', key, iv);
11
12const textToEncrypt = 'Nest';
13const encryptedText = Buffer.concat([
14 cipher.update(textToEncrypt),
15 cipher.final(),
16]);Endi encryptedText qiymatini yechamiz:
1import { createDecipheriv } from 'node:crypto';
2
3const decipher = createDecipheriv('aes-256-ctr', key, iv);
4const decryptedText = Buffer.concat([
5 decipher.update(encryptedText),
6 decipher.final(),
7]);Hashing
Hashing uchun bcrypt yoki argon2 paketlaridan foydalanishni tavsiya qilamiz. Nest keraksiz abstraksiyalar kiritmaslik uchun bu modullar ustidan qo'shimcha o'ramlar taqdim etmaydi (o'rganish egri chizig'ini qisqartirish uchun).
Masalan, tasodifiy parolni hash qilish uchun bcryptdan foydalanamiz.
Avval kerakli paketlarni o'rnating:
1$ npm i bcrypt
2$ npm i -D @types/bcryptO'rnatish tugagach, hash funksiyasidan quyidagicha foydalanishingiz mumkin:
1import * as bcrypt from 'bcrypt';
2
3const saltOrRounds = 10;
4const password = 'random_password';
5const hash = await bcrypt.hash(password, saltOrRounds);Salt yaratish uchun genSalt funksiyasidan foydalaning:
1const salt = await bcrypt.genSalt();Parolni solishtirish/tekshirish uchun compare funksiyasidan foydalaning:
1const isMatch = await bcrypt.compare(password, hash);Mavjud funksiyalar haqida batafsil bu yerda o'qing.