Jeg har denne spørringen i sql server 2000:
select pwdencrypt('AAAA')
som sender ut en kryptert streng på 'AAAA':
0x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455D12625EF019E157120D58DD46569AC7BF4118455D
**Hvordan kan jeg konvertere (dekryptere) utdataene fra opprinnelsen (som er 'AAAA')?
Jeg tror pwdencrypt bruker en hash slik at du ikke kan reversere den hashede strengen - algoritmen er utformet slik at det er umulig.
Hvis du skal verifisere passordet som en bruker har skrevet inn, er den vanlige teknikken å hashe det og deretter sammenligne det med den hashede versjonen i databasen.
Slik kan du verifisere en bruker som har tastet inn tabellen
SELECT password_field FROM mytable WHERE password_field=pwdencrypt(userEnteredValue)
Erstatt userEnteredValue med (stor overraskelse) verdien som brukeren skrev inn :)
Du er klar over at du kan komme til å gjøre deg selv en bjørnetjeneste for fremtiden. Funksjonene pwdencrypt() og pwdcompare() er udokumenterte funksjoner og vil kanskje ikke oppføre seg på samme måte i fremtidige versjoner av SQL Server.
Hvorfor ikke hashe passordet ved hjelp av en forutsigbar algoritme som SHA-2 eller bedre før det sendes til DB-en?
Du kan ikke dekryptere dette passordet igjen, men det finnes en annen metode som heter "pwdcompare". Her er et eksempel på hvordan du bruker den med SQL-syntaks:
USE TEMPDB
GO
declare @hash varbinary (255)
CREATE TABLE tempdb..h (id_num int, hash varbinary (255))
SET @hash = pwdencrypt('123') -- encryption
INSERT INTO tempdb..h (id_num,hash) VALUES (1,@hash)
SET @hash = pwdencrypt('123')
INSERT INTO tempdb..h (id_num,hash) VALUES (2,@hash)
SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 2
SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison
SELECT * FROM tempdb..h
INSERT INTO tempdb..h (id_num,hash)
VALUES (3,CONVERT(varbinary (255),
0x01002D60BA07FE612C8DE537DF3BFCFA49CD9968324481C1A8A8FE612C8DE537DF3BFCFA49CD9968324481C1A8A8))
SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 3
SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison
SELECT * FROM tempdb..h
DROP TABLE tempdb..h
GO