Lösenordskryptering maskerar användarnas lösenord så att de blir svåra att gissa eller avkoda. Det är ett viktigt steg för att utveckla säker användarbaserad programvara. Oavsett om du bygger en med Flask eller ett annat lätt Python Framework, kan du inte ignorera det steget. Det är där bcrypt kommer in.
Vi visar dig hur du använder bcrypt för att hasha ditt lösenord i Python.
Hur bcrypt fungerar
Bcrypt är ett språkagnostiskt hashbibliotek som erbjuder unik lösenordskryptering. När du krypterar din sträng genererar den extra slumpmässiga tecken (salt) som standard för att öka säkerheten för ditt lösenord.
Alternativt kan du också ange antalet extra tecken du vill lägga till i en inkommande sträng.
De bcrypt-biblioteket läser inte råsträngar – endast bytekod. Så till att börja med, kodar du först en inkommande lösenordssträng innan du skickar den till bcrypt för kryptering.
Kodning är inte detsamma som kryptering. Det säkerställer bara att en sträng blir maskinläsbar innan en krypteringsalgoritm kan maskera den.
Kryptera ett lösenord i Python med bcrypt
Bcrypt lösenordskryptering är enkelt med Python. Vi kommer att fokusera på hur man gör detta utan att använda ett ramverk. Men inga bekymmer, det följer samma process i ramverk när du vet hur du lagrar dina användares indata och läser dem från databasen.
Installera och konfigurera bcrypt
Om du inte redan har gjort det, aktivera en virtuell Python-miljö i din projektrot. Installera sedan bcrypt med pip:
pip install bcrpyt
Börja kryptera lösenord
När det är installerat, låt oss se hur man krypterar en sträng med bcrypt:
# Import bcrypt:
import bcrypt
password = "mypasswordstring"
# Encode password into a readable utf-8 byte code:
password = password.encode('utf-8')
# Hash the ecoded password and generate a salt:
hashedPassword = bcrypt.hashpw(password, bcrypt.gensalt())
print(hashedPassword)
När du kör Python-koden ovan, skriver den ut en krypterad bytesträng. Utdata ändras dock varje gång du kör skriptet. Detta är hur bcrypt säkerställer att varje användare har ett unikt krypterat lösenord.
Det är för lösenordskryptering, förresten.
Hur man jämför och bekräftar lösenord med bcrypt
Vad händer om du vill lagra det hashade lösenordet och senare bekräfta att det matchar användarens lösenord under autentiseringen?
Det är lätt. Du behöver bara jämföra autentiseringslösenordet med det som är lagrat i databasen (eller i minnet i detta fall).
Och eftersom bcrypt bara läser bytesträngar, måste du också koda autentiseringslösenordet innan du jämför det med det i databasen. I huvudsak korskontrollerar du en kodad autentiseringsingång med det kodade hashade lösenordet som redan finns lagrat i din databas.
Med hjälp av dummy Python-ingångar, låt oss se hur detta fungerar i praktiken:
import bcrypt
#store your password:
password = str(input("input password: "))
# Encode the stored password:
password = password.encode('utf-8')
# Encrypt the stored pasword:
hashed = bcrypt.hashpw(password, bcrypt.gensalt(10))
# Create an authenticating password input field to check if a user enters the correct password:
check = str(input("check password: "))
# Encode the authenticating password as well:
check = check.encode('utf-8')
# Use conditions to compare the authenticating password with the stored one:
if bcrypt.checkpw(check, hashed):
print("login success")
else:
print("incorrect password")
Ovanstående kod ber dig att ange ett nytt lösenord när du kör det. Python lagrar detta i minnet. Du anger sedan samma lösenord (endast känt för dig) i autentiseringsfältet.
Python skriver ut ett framgångsmeddelande om det jämförda lösenordet matchar det tidigare lagrade krypterade. Annars matas det misslyckade meddelandet in i annan påstående:
Hela konceptet är detsamma som att lagra ett lösenord i en databas under registreringen och tillhandahålla det senare under autentiseringen.
Skala upp kryptering med bcrypt
Även om vi bara har visat hur bcrypt fungerar genom att lagra krypterade lösenord i vanligt Python-kortminne, är dess ultimata användning i verkliga användarbaserade applikationer.
Icke desto mindre visar den här handledningen de grundläggande sätten att strukturera din kod för att uppnå detta, även i verkliga scenarier. Om du till exempel använder Flask kan du ersätta indata med separata webbformulär för att tjäna registrerings- och autentiseringsfälten. Och naturligtvis kommer du att lagra krypterade lösenord i en verklig databas och läsa från den när du jämför lösenord.
Om författaren
Idowu Omisola (123 artiklar publicerade)
Idowu brinner för allt smart teknik och produktivitet. I hans free tid, han leker med kodning och byter till schackbrädet när han har tråkigt, men han älskar också att bryta sig loss från rutinen då och då. Hans passion för att visa människor vägen runt modern teknik motiverar honom att skriva mer.
Mer från Idowu Omisola
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, free e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera
