Bagaimana cara mendekripsi kata sandi dari server SQL?

Saya memiliki query ini di sql server 2000:

select pwdencrypt('AAAA')

yang menghasilkan string terenkripsi 'AAAA':

0x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455D12625EF019E157120D58DD46569AC7BF4118455D

Bagaimana saya dapat mengkonversi (mendekripsi) output dari asalnya (yaitu 'AAAA')?

Larutan

Saya percaya pwdencrypt menggunakan hash sehingga Anda tidak dapat benar-benar membalikkan string hash - algoritmanya dirancang sedemikian rupa sehingga tidak mungkin.

Jika anda memverifikasi kata sandi yang dimasukkan pengguna, teknik yang biasa digunakan adalah dengan melakukan hash dan kemudian membandingkannya dengan versi hash dalam database.

Ini adalah bagaimana Anda bisa memverifikasi tabel yang dimasukkan pengguna

SELECT password_field FROM mytable WHERE password_field=pwdencrypt(userEnteredValue)

Ganti userEnteredValue dengan (kejutan besar) nilai yang dimasukkan pengguna :)

Komentar (5)

Anda menyadari bahwa Anda mungkin membuat tongkat untuk punggung Anda sendiri untuk masa depan. Fungsi pwdencrypt() dan pwdcompare() adalah fungsi yang tidak terdokumentasi dan mungkin tidak berperilaku sama di versi SQL Server yang akan datang.

Mengapa tidak melakukan hash kata sandi menggunakan algoritma yang dapat diprediksi seperti SHA-2 atau lebih baik sebelum masuk ke DB?

Komentar (1)

Anda tidak dapat mendekripsi kata sandi ini lagi tetapi ada metode lain bernama "pwdcompare &". Berikut ini adalah contoh cara menggunakannya dengan sintaks SQL:

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
Komentar (0)