Hvordan krypteres adgangskoder ved hjælp af 'EncryptByPassPhrase'?
Selvom det kan være populær praksis at gemme adgangskoder i en database, er det generelt ikke så almindeligt at gemme dem korrekt. Du har tre valg om, hvordan du gør det, når du gemmer en adgangskode i en database. Du kan gemme din adgangskode som:
Normalt er vi nødt til at dekryptere vores krypterede værdier af forskellige årsager. Så valg 2 "Krypteret tekst, der kan dekrypteres" følges normalt til dette formål.
I denne artikel vil vi diskutere, hvordan man gør det Krypteret og dekryptere tekst, hvilke fejl der opstår under dette, og hvad er den anbefalede måde at følge.
Krypteret tekst, der kan dekrypteres:
Alle forstår, hvad en adgangskode er, færre personer er fortrolige med adgangssætninger. Adgangssætningen er forholdsvis mere sikker. "Entropi" er en opfattelse i teorien om informationsteknologi, der henviser til den mængde tilfældighed, en adgangskode indeholder. Jo mere tilfældighed en adgangskode indeholder, jo vanskeligere er det at bryde adgangskoden af hackerne. Derfor foretrækkes længere adgangskoder, da de sandsynligvis er mere "tilfældig“. Ved at føje ord til adgangskoden kan entropien øges. I SQL Server 2008 og over “ENCRYPTBYPASSPHRASE” funktion understøtter kryptering af adgangssætning, hvor du kan bruge sætninger som f.eks “Jeg ville elske noget is” som din adgangskode end adgangskoder, der ikke understøtter mellemrum. Desuden kan det kryptere din mere sikre adgangskode.
Det “ENCRYPTBYPASSPHRASE” -funktion giver os mulighed for at kryptere enhver streng eller VARBINÆR værdi op til 7975 bytes. Det har brug for to parametre, @ adgangskodeog @cleartext, og returnerer en værdi, der indeholder de krypterede værdier af typen VARBINÆR (8000).
Krypter adgangskodeoplysninger ved hjælp af128-nøgles bitlængde TRIPLE DES algoritme. En adgangssætning er en plads-inklusive adgangskode. Fordelen ved at bruge en adgangssætning er, at det at huske en væsentlig sætning eller sætning er enklere end at huske en relativt lang karakterstreng.
ENCRYPTBYPASSPHRASE:
“ENCRYPTBYPASSPHRASE” tilbyder en hurtig og nem måde at kryptere SQL Server-kolonner med data på. Denne funktion er tilgængelig i SQL Server 2008 og op.
Syntaks:
EncryptByPassPhrase (@passphrase, @cleartext)
Argumenter:
@passphrase:
En asymmetrisk nøgle genereres ud fra en adgangssætning. Dette kan være varchar, char, varchar, binær, VARBINÆR, eller NCHAR type variabel, der indeholder en adgangssætning, hvorfra en symmetrisk nøgle kan produceres. Enhver anden datatype, såsom en DATE, skal du først udtrykkeligt konvertere til en binær værdi for at kryptere en fødselsdato.
@cleartext:
En NVARCHAR, char, varchar, binær, VARBINÆR, eller NCHAR type variabel, der indeholder almindelig tekst. Det maksimum størrelse er otte tusind byte.
Returtyper:
VARBINÆR med 8,000 bytes maksimal størrelse.
Implementering:
OPRET TABEL dbo.encrypted_data ([Id] INT IDENTITY (1,1) PRIMÆR NØGLE, [password] VARBINÆR (8000));
Id-værdien forbliver ukrypteret, mens adgangskodekolonnen er af typen VARBINÆR (8000), der svarer til returtypen for ENCRYPTBYPASSPHRASE fungere.
INSERT INTO dbo.encrypted_data ([password)) VÆRDIER (ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Dette er mit kreditkortnummer!'));
Det ses, at den første parameter er adgangssætningen, der giver en symmetrisk nøgle. Mens den anden er, skal tekstværdien krypteres.
vælg * fra krypterede_data
Resultatsættet ser ud.
Denne sætning af SELECT returnerer en værdi påVARBINÆRsåsom:
“0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D”
Det er vigtigt at bemærke, at VARBINÆR værdi returneret fra ENCRYPTBYPASSPHRASE er ikke-deterministisk. Dette betyder, at det ikke vil generere det samme resultat hver gang, selv med den samme input. Så den samme SELECT-sætning, hvis vi kører dem to gange, kan vi få to forskellige output.
VÆLG ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Dette er mit kreditkortnummer!'); VÆLG ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Dette er mit kreditkortnummer!'); VÆLG ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'Dette er mit kreditkortnummer!');
Den valgte erklæring vil give sæt som dette:
“0x010000002D69EDEEA6B486FAF38FB353CF2682EE30B450488109BD0E23B88E03CD48F72673C6A462B210D6CE38E00E9F8BA18AB7” for først at vælge sætning.
“0x010000007C5736E4B0F15D971D771D2D146924F741D2DB04477C882A6BAF65703F01D950B1AD01E7E4E27E89243F6A4F549170E2” til anden erklæring.
“0x010000009B49BEBAB4B5E510C0C2998604A005617398631C2EBFB0E3C08DDF27C2A06F447FC11BD10B416C7E58038109EBD52021” til tredje erklæring.
AFKRYPTBYPASSPHRASE:
Vi skal være i stand til at dekryptere det nu, fordi vores adgangskode er krypteret. Dette gøres let ved hjælp af funktionen AFKRIPPTBYPASSPHRASE med den samme adgangssætning, som vi krypterede vores adgangskode med.
Udfør følgende kode. Og du får adgangskoden med nogle lange alfanumeriske tegn som en output som denne.
“0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D”
vælg id, DECRYPTBYPASSPHRASE ('SQL SERVER 2017', adgangskode) som adgangskode fra encrypted_data
Det er ikke et kodeord. Synes godt om ENCRYPTBYPASSPHRASE, AFKRIPPTBYPASSPHRASE returnerer a VARBINÆR værdi, der skal kodes i en funktionel streng. Ved at tilføje en CONVERT- eller cast-funktion til vores SELECT-sætning kan dette gøres let.