Един от най-добрите начини за сигурно съхраняване на пароли е да ги посолите и хеширате. Осоляването и хеширането преобразува обикновена парола в уникална стойност, която е трудна за обръщане. Библиотеката bcrypt ви позволява да хеширате и солите пароли в Node.js с много малко усилия.

Какво е хеширане на парола?

Хеширане на парола означава предаване на парола с обикновен текст през алгоритъм за хеширане за генериране на уникална стойност. Някои примери за алгоритми за хеширане са bcrypt, scrypt и SHA. Недостатъкът на хеширането е, че е предвидим.

Всеки път, когато подадете един и същ вход към алгоритъм за хеширане, той ще генерира същия изход. Хакер с достъп до хеширана парола може да направи обратен инженеринг на криптирането, за да получи оригиналната парола. Те могат да използват техники като атаки с груба сила или дъгови маси. Тук идва осоляването.

Какво е осоляване на парола?

Осоляване на парола добавя произволен низ (солта) към парола, преди да я хешира. По този начин генерираният хеш винаги ще бъде различен всеки път. Дори ако хакер получи хешираната парола, за тях е непрактично да открият оригиналната парола, която я е генерирала.

instagram viewer

Как да използвате 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
  • Сигурност
  • Алгоритми

За автора

Мери Гатони (21 публикувани статии)

Мери Гатони е разработчик на софтуер със страст за създаване на техническо съдържание, което е не само информативно, но и ангажиращо. Когато не кодира или пише, тя обича да излиза с приятели и да е на открито.

Още от Mary Gathoni

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!

Щракнете тук, за да се абонирате