Hoe wachtwoorden te versleutelen met ‘EncryptByPassPhrase’?
Hoewel het een populaire praktijk kan zijn om wachtwoorden in een database op te slaan, is het over het algemeen niet zo gebruikelijk om ze correct op te slaan. U heeft drie keuzes om dit te doen wanneer u een wachtwoord opslaat in een database. U kunt uw wachtwoord opslaan als:
Gewoonlijk moeten we onze gecodeerde waarden om verschillende redenen decoderen. Dus optie 2 "Versleutelde tekst die kan worden ontsleuteld" wordt hiervoor meestal gevolgd.
In dit artikel zullen we bespreken hoe Versleuteld en decoderen tekst, welke fouten er optreden terwijl u dit doet en wat de aanbevolen manier is om te volgen.
Versleutelde tekst die kan worden ontsleuteld:
Iedereen begrijpt wat een wachtwoord is, minder mensen zijn bekend met wachtwoordzinnen. De wachtwoordzin is relatief veiliger. "Entropie" is een begrip in de theorie van informatietechnologie dat verwijst naar de hoeveelheid willekeur die een wachtwoord bevat. Meestal geldt dat hoe meer willekeur een wachtwoord bevat, hoe moeilijker het is om het wachtwoord door de hackers te kraken. Dat is de reden waarom langere wachtwoorden de voorkeur hebben, aangezien ze waarschijnlijk meer zijn "willekeurig“. Door woorden aan het wachtwoord toe te voegen, kan de entropie worden verhoogd. In SQL Server 2008 en hoger "ENCRYPTBYPASSPHRASE" functie ondersteunt codering van wachtwoordzin waar u zinnen als . kunt gebruiken "Ik zou wel wat ijs willen" als uw wachtwoord dan wachtwoorden die geen spaties ondersteunen. Bovendien kan het uw veiligere wachtwoord versleutelen.
De "ENCRYPTBYPASSPHRASE" functie stelt ons in staat om elke string of VARBINAIR waarde tot 7975 bytes. Het heeft twee parameters nodig, @wachtwoordzin, en @duidelijke tekst, en retourneert een waarde die de versleutelde waarden van type bevat VARBINAIR (8000).
Codeer wachtwoordzin-informatie met de128-key bit lengte TRIPLE DES algoritme. Een wachtwoordzin is een wachtwoord inclusief een spatie. Het voordeel van het gebruik van een wachtwoordzin is dat het onthouden van een belangrijke zin of zin eenvoudiger is dan het onthouden van een relatief lange tekenreeks.
ENCRYPTBYPASSPHRASE:
"ENCRYPTBYPASSPHRASE" biedt een snelle en gemakkelijke manier om SQL Server-gegevenskolommen te versleutelen. Deze functie is beschikbaar in SQL Server 2008 en omhoog.
Syntaxis:
EncryptByPassPhrase (@passphrase, @cleartext)
Argumenten:
@wachtwoordzin:
Een asymmetrische sleutel wordt gegenereerd op basis van een wachtwoordzin. Dit kan varchar, char, varchar, binair, VARBINAIR, of NCHAR typevariabele die een wachtwoordzin bevat om een symmetrische sleutel te produceren. Elk ander gegevenstype, zoals een DATE, moet u eerst expliciet converteren naar een binaire waarde om een geboortedatum te coderen.
@duidelijke tekst:
Een NVARCHAR, char, varchar, binair, VARBINAIR, of NCHAR typevariabele die de platte tekst bevat. De maximum maat is achtduizend bytes.
Retourtypen:
VARBINAIR met 8,000 bytes maximumgrootte.
Implementatie:
TABEL MAKEN dbo.encrypted_data ([Id] INT IDENTITY (1,1) PRIMAIRE SLEUTEL, [wachtwoord] VARBINARY (8000));
De id-waarde blijft ongecodeerd, terwijl de wachtwoordkolom van het type is VARBINAIR (8000), die overeenkomt met het retourtype van de ENCRYPTBYPASSPHRASE functie.
INVOEGEN IN dbo.encrypted_data ([wachtwoord]) WAARDEN (ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Dit is mijn creditcardnummer!'));
Men ziet dat de eerste parameter de wachtwoordzin is die een symmetrische sleutel verschaft. De tweede is dat de tekstwaarde moet worden versleuteld.
selecteer * uit encrypted_data
De resultaatset ziet eruit als.
Die instructie van SELECT retourneert een waarde vanVARBINAIRzoals:
"0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D"
Het is belangrijk op te merken dat de VARBINAIR waarde geretourneerd van ENCRYPTBYPASSPHRASE is niet-deterministisch. Dit betekent dat het niet elke keer hetzelfde resultaat zal genereren, zelfs niet met dezelfde invoer. Dus dezelfde SELECT-instructie als we ze twee keer uitvoeren, kunnen we twee verschillende outputs krijgen.
SELECTEER ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Dit is mijn creditcardnummer!'); SELECTEER ENCRYPTBYPASSPHRASE('SQL SERVER 2017','Dit is mijn creditcardnummer!'); SELECTEER ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Dit is mijn creditcardnummer!');
De select-instructie zal als volgt worden weergegeven:
“0x010000002D69EDEEA6B486FAF38FB353CF2682EE30B450488109BD0E23B88E03CD48F72673C6A462B210D6CE38E00E9F8BA18AB7” voor de eerste keuze-instructie.
"0x010000007C5736E4B0F15D971D771D2D146924F741D2DB04477C882A6BAF65703F01D950B1AD01E7E4E27E89243F6A4F549170E2" voor de tweede verklaring.
"0x010000009B49BEBAB4B5E510C0C2998604A005617398631C2EBFB0E3C08DDF27C2A06F447FC11BD10B416C7E58038109EBD52021" voor derde verklaring.
DECODERING DOOR PASPASFASE:
We moeten het nu kunnen decoderen omdat ons wachtwoord is gecodeerd. Dit is eenvoudig te doen door de functie te gebruiken DECRYPT DOORPASPASFASE met dezelfde wachtwoordzin waarmee we ons wachtwoord hebben versleuteld.
Voer de volgende code uit. En je krijgt het wachtwoord met een aantal lange alfanumerieke tekens als een uitvoer zoals deze.
"0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D"
selecteer id, DECRYPTBYPASSPHRASE ('SQL SERVER 2017', wachtwoord) als wachtwoord van encrypted_data
Dat is geen wachtwoord. Leuk vinden ENCRYPTBYPASSPHRASE, DECRYPT DOORPASPASFASE retourneert een VARBINAIR waarde die moet worden gecodeerd in een functionele tekenreeks. Door een CONVERT- of cast-functie toe te voegen aan onze SELECT-instructie, kan dit eenvoudig worden gedaan.