Един от най-добрите начини за сигурно съхраняване на пароли е да ги посолите и хеширате. Осоляването и хеширането преобразува обикновена парола в уникална стойност, която е трудна за обръщане. Библиотеката bcrypt ви позволява да хеширате и солите пароли в Node.js с много малко усилия.
Какво е хеширане на парола?
Хеширане на парола означава предаване на парола с обикновен текст през алгоритъм за хеширане за генериране на уникална стойност. Някои примери за алгоритми за хеширане са bcrypt, scrypt и SHA. Недостатъкът на хеширането е, че е предвидим.
Всеки път, когато подадете един и същ вход към алгоритъм за хеширане, той ще генерира същия изход. Хакер с достъп до хеширана парола може да направи обратен инженеринг на криптирането, за да получи оригиналната парола. Те могат да използват техники като атаки с груба сила или дъгови маси. Тук идва осоляването.
Какво е осоляване на парола?
Осоляване на парола добавя произволен низ (солта) към парола, преди да я хешира. По този начин генерираният хеш винаги ще бъде различен всеки път. Дори ако хакер получи хешираната парола, за тях е непрактично да открият оригиналната парола, която я е генерирала.
Как да използвате bcrypt за хеширане и проверка на парола
bcrypt е npm модул, който опростява осоляването и хеширането на пароли.
Стъпка 1: Инсталирайте bcrypt
Използване на npm:
npm Инсталирай bcrypt
Използване на прежда:
прежда добавете bcrypt
Стъпка 2: Импортирайте bcrypt
const bcrypt = изискват("bcrypt")
Стъпка 3: Генерирайте сол
За да генерирате сол, обадете се на bcrypt.genSalt() метод. Този метод приема целочислена стойност, която е факторът на разходите, който определя времето, необходимо за хеширане на парола. Колкото по-висок е факторът на разходите, толкова повече време отнема алгоритъмът и толкова по-трудно е да се обърне хеширането с помощта на груба сила. Добрата стойност трябва да е достатъчно висока, за да защити паролата, но и достатъчно ниска, за да не забавя процеса. Обикновено варира между 5 и 15. В този урок ще използваме 10.
bcrypt.genSalt (10, (грешка, сол) => {
// използвайтесолда сехашпарола
})
Стъпка 4: Хеширайте паролата
Предайте обикновената парола и генерираната сол на хеш() метод:
bcrypt.genSalt (10, (грешка, сол) => {
bcrypt.hash (plaintextPassword, сол, функция(греш, хеш) {
// Съхранявайте хеш в базата данни
});
})
След като генерирате хеша, съхранете го в базата данни. Ще го използвате за проверка на парола и удостоверяване на потребител, който се опитва да влезе.
Вместо да генерирате солта и хеша поотделно, можете също така автоматично да генерирате солта и хеша с помощта на една функция.
bcrypt.hash (plaintextPassword, 10, функция(греш, хеш) {
// съхранява хеш в базата данни
});
Стъпка 5: Сравнете пароли с помощта на bcrypt
Да се удостоверяване на потребители, ще трябва да сравните паролата, която те предоставят, с тази в базата данни. bcrypt.compare() приема паролата в обикновен текст и хеша, които сте съхранили, заедно с функцията за обратно извикване. Това обратно извикване предоставя обект, съдържащ всички възникнали грешки и общия резултат от сравнението. Ако паролата съвпада с хеша, резултатът е верен.
bcrypt.compare (plaintextPassword, хеш, функция(греш, резултат) {
if (резултат) {
// паролата е валидна
}
});
Използване на Async/Await
Можете да хеширате и проверявате паролите, като използвате async/await, както следва.
асинхроннофункцияhashPassword(обикновен текстПарола) {
const хеш = чакам bcrypt.hash (plaintextPassword, 10);
// Съхранявайте хеш в базата данни
}
// сравни парола
асинхроннофункциясравни парола(обикновен текстПарола, хеш) {
const резултат = чакам bcrypt.compare (plaintextPassword, хеш);
връщане резултат;
}
Използване на обещания
Библиотеката bcrypt също поддържа използването на обещания.
функцияhashPassword(обикновен текстПарола) {
bcrypt.хеш(обикновен текстПарола, 10)
.след това (хеш => {
// Съхранявайте хеш в базата данни
})
.улов(грешка => {
конзола.log (грешка)
})
}
функциясравни парола(обикновен текстПарола, хеш) {
bcyrpt.сравни(обикновен текстПарола, хаш)
.след това (резултат => {
връщане резултат
})
.улов(грешка => {
конзола.log (грешка)
})
}
Хеширането и осоляването е лесна печалба
Можете да използвате библиотеката bcrypt за хеширане и проверка на пароли в Node.js. Хеширането на пароли свежда до минимум шансовете киберпрестъпниците да ги използват за достъп до чувствителни данни или услуги. Подсоляването на вашите хеширани пароли ги прави още по-сигурни. Освен хеширане, винаги проверявайте силата на паролата като допълнителна мярка за сигурност.
8-те най-често срещани трика, използвани за хакване на пароли
Прочетете Следващото
Свързани теми
- Програмиране
- Сигурност
- Програмиране
- JavaScript
- Сигурност
- Алгоритми
За автора
Мери Гатони е разработчик на софтуер със страст за създаване на техническо съдържание, което е не само информативно, но и ангажиращо. Когато не кодира или пише, тя обича да излиза с приятели и да е на открито.
Абонирайте се за нашия бюлетин
Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!
Щракнете тук, за да се абонирате