Hur krypterar jag lösenord med 'EncryptByPassPhrase'?
Även om det kan vara populärt att lagra lösenord i en databas är det vanligtvis inte så vanligt att lagra dem korrekt. Du har tre val för hur du gör det när du lagrar ett lösenord i en databas. Du kan spara ditt lösenord som:
Vanligtvis behöver vi dekryptera våra krypterade värden av olika skäl. Så alternativ 2 ”Krypterad text som kan dekrypteras” följs vanligtvis för detta ändamål.
I den här artikeln kommer vi att diskutera hur man gör det Krypterad och Avkryptera text, vilka fel som uppstår när du gör det och vad är det rekommenderade sättet att följa.
Krypterad text som kan dekrypteras:
Alla förstår vad ett lösenord är, färre individer känner till lösenfraser. Lösenfrasen är jämförelsevis säkrare. "Entropi" är ett begrepp i teorin om informationsteknik som hänvisar till mängden slumpmässighet som ett lösenord innehåller. Ju mer slumpmässighet ett lösenord innehåller, desto svårare är det att bryta lösenordet av hackarna. Det är anledningen till att längre lösenord föredras eftersom de förmodligen är mer "slumpmässig“. Genom att lägga till ord i lösenordet kan entropin ökas. I SQL Server 2008 och ovan “ENCRYPTBYPASSPHRASE” funktionen stöder kryptering av lösenfras där du kan använda fraser som "Jag skulle älska lite glass" som lösenord än lösenord som inte stöder mellanslag. Dessutom kan det kryptera ditt säkrare lösenord.
De “ENCRYPTBYPASSPHRASE” -funktionen låter oss kryptera valfri sträng eller VARBINÄR värde upp till 7975 byte. Det behöver två parametrar, @ lösenfrasoch @klar textoch returnerar ett värde som innehåller de krypterade värdena av typen VARBINÄR (8000).
Kryptera information om lösenfras med128-nyckel bitlängd TRIPLE DES algoritm. En lösenfras är ett lösenord inklusive utrymme. Fördelen med att använda en lösenfras är att det är enklare att komma ihåg en betydande mening eller fras än att komma ihåg en relativt lång teckensträng.
KrypteraBYPASSPHRASE:
"ENCRYPTBYPASSPHRASE" erbjuder ett snabbt och enkelt sätt att kryptera SQL Server-kolumner med data. Denna funktion finns i SQL Server 2008 och upp.
Syntax:
EncryptByPassPhrase (@passphrase, @cleartext)
Argument:
@ lösenfras:
En asymmetrisk nyckel genereras från en lösenfras. Detta kan vara varchar, char, varchar, binär, VARBINÄR, eller NCHAR typvariabel som innehåller en lösenfras för att producera en symmetrisk nyckel. Alla andra datatyper, till exempel en DATE, måste du först uttryckligen konvertera till ett binärt värde för att kryptera ett födelsedatum.
@klar text:
Ett NVARCHAR, röding, varchar, binär, VARBINÄR, eller NCHAR typvariabel som innehåller ren text. De maximal storlek är åtta tusen byte.
Returtyper:
VARBINÄR med 8,000 byte maximal storlek.
Genomförande:
SKAPA TABELL dbo.encrypted_data ([Id] INT IDENTITY (1,1) PRIMARY KEY, [password] VARBINARY (8000));
Id-värdet förblir okrypterat, medan lösenordskolumnen är av typ VARBINÄR (8000), som matchar returtypen för KrypteraBYPASSPHRASE fungera.
INSERT INTO dbo.encrypted_data ([password)) VÄRDEN (ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Detta är mitt kreditkortsnummer!'));
Det ses att den första parametern är lösenfrasen som ger en symmetrisk nyckel. Den andra är att textvärdet måste krypteras.
välj * från krypterad_data
Resultatuppsättningen kommer att se ut.
Det uttalandet av SELECT returnerar värdet påVARBINÄRTill exempel:
“0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D”
Det är viktigt att notera att VARBINÄR värde returneras från KrypteraBYPASSPHRASE är icke-deterministisk. Detta innebär att det inte kommer att generera samma resultat varje gång även med samma ingång. Så samma SELECT-sats om vi kör dem två gånger kan vi få två olika utgångar.
VÄLJ ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Detta är mitt kreditkortsnummer!'); VÄLJ ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Detta är mitt kreditkortsnummer!'); VÄLJ ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Detta är mitt kreditkortsnummer!');
Select-uttalandet kommer att ge ut så här:
“0x010000002D69EDEEA6B486FAF38FB353CF2682EE30B450488109BD0E23B88E03CD48F72673C6A462B210D6CE38E00E9F8BA18AB7” för först välja uttalande.
“0x010000007C5736E4B0F15D971D771D2D146924F741D2DB04477C882A6BAF65703F01D950B1AD01E7E4E27E89243F6A4F549170E2” för andra uttalande.
“0x010000009B49BEBAB4B5E510C0C2998604A005617398631C2EBFB0E3C08DDF27C2A06F447FC11BD10B416C7E58038109EBD52021” för tredje uttalande.
DECRYPTBYPASSPHRASE:
Vi måste kunna dekryptera det nu eftersom vårt lösenord har krypterats. Detta görs enkelt med hjälp av funktionen DECRYPTBYPASSPHRASE med samma lösenfras som vi krypterade vårt lösenord med.
Kör följande kod. Och du får lösenordet med några långa alfanumeriska tecken som en utdata som denna.
“0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D”
välj id, DECRYPTBYPASSPHRASE ('SQL SERVER 2017', lösenord) som lösenord från encrypted_data
Det är inte ett lösenord. Tycka om KrypteraBYPASSPHRASE, DECRYPTBYPASSPHRASE returnerar a VARBINÄR värde som ska kodas till en funktionell sträng. Genom att lägga till en CONVERT- eller cast-funktion i vårt SELECT-uttalande kan detta göras enkelt.