2013-05-30 11 views
7

Używam SQL 2000. ciąg kolumna „Hasło” jest tam w tabeli „Użytkownicy”. Ma około 3k wierszy. Moim wymaganiem jest zaszyfrowanie wszystkich wartości kolumny "Hasło". Ponadto, powinienem być w stanie odszyfrować te zaszyfrowane pola hasła, gdy jest to potrzebne.zaszyfrowania kolumny w SQL 2000 lub SQL za pośrednictwem kodu skryptu

wiem, od SQL 2005 naprzód, są wbudowane funkcjonalistów do tych wymagań. Ale jestem zaniepokojony SQL 2000.

Proszę zasugerować , jeśli istnieje sposób, aby osiągnąć moje wymagania za pomocą kodu VB lub skryptu SQL. NIE z żadnymi narzędziami innych firm. Przeszukałem wiele miejsc, ale bez powodzenia.

Dzięki.

+1

'VB6' lub' VB.NET'? Tak czy inaczej jestem przekonany, że Google będzie miał wiele wyników. Dlaczego tak czy inaczej szyfrowanie musi być odwracalne? Zazwyczaj wystarczy użyć mieszania jednokierunkowego. –

+0

VB6. Wartości ciągów powinny być najpierw zaszyfrowane. Jednak, gdy będzie to wymagane w przyszłości, należy odszyfrować tę samą zaszyfrowaną wartość do oryginalnej wartości ciągu. – Kings

Odpowiedz

5

Można użyć nieudokumentowanych PWDENCRYPT i PWDCOMPARE funkcje dostępne w SQL Server 2000 -

CREATE TABLE #USER 
(
    LOGIN_ID varchar(20), 
    UserPassword nvarchar(256) 
) 

-- Encrypt & Insert Password 
-- Note: You will have to write UPDATE on existing records 
INSERT #USER VALUES ('my_loginid', PWDENCRYPT('MyPassword1')) 


DECLARE @InputPassword VARCHAR(100) 
DECLARE @IsValid INT = 0 

-- Test for Correct Password 

SET @InputPassword = 'MyPassword1' 

SET @IsValid = (SELECT PWDCOMPARE(@InputPassword, UserPassword, 0) 
       FROM #USER 
       WHERE LOGIN_ID = 'my_loginid') 


SELECT @IsValid AS 'Test1'; 

-- Test for Wrong Password 

SET @InputPassword = 'WrongPassword' 

SET @IsValid = (SELECT PWDCOMPARE(@InputPassword, UserPassword, 0) 
       FROM #USER 
       WHERE LOGIN_ID = 'my_loginid') 

SELECT @IsValid AS 'Test2' 

DROP TABLE #USER 

referencyjne linki -

1

Hasła są zwykle przechowywane z 1 way hash (na przykład SHA1), co oznacza, że ​​są szyfrowane i nie muszą być odszyfrowane. Gdy użytkownik wprowadzi hasło, Twój kod będzie go mieszał i sprawdzał, czy wartość hashowana jest zgodna z wartością hashowaną w bazie danych.

Jednak to brzmi jak masz wymóg, aby być w stanie odszyfrować hasło. W tym celu istnieje kilka asymetrycznych algorytmów (RSA, PGP, itp.), W których można utworzyć parę kluczy prywatnych i publicznych. Klucz prywatny jest trzymany w tajemnicy, a klucz publiczny może być udostępniany innym, aby móc szyfrować własne informacje przed wysłaniem go do Ciebie. Wygląda na to, że to przesada, ponieważ tylko twój kod VB6 potrzebuje szyfrowania danych, a nie stron trzecich. Dlatego możesz po prostu użyć algorytmu symetrycznego (takiego jak Blowfish lub TripleDES), w którym używasz tego samego hasła (zamiast pary kluczy) do szyfrowania i odszyfrowywania danych. To hasło można zapisać w pliku konfiguracyjnym na serwerze. Upewnij się, że jest chroniony przed nieautoryzowanymi użytkownikami.

Widziałeś ten artykuł? Używa TripleDES z hasłem, które brzmi dokładnie tak, jak potrzebujesz. http://msdn.microsoft.com/en-us/library/ms172831(v=vs.80).aspx

1

Obecnie uważa się za złą praktykę po prostu do szyfrowania haseł na własną rękę. Często dowolny ciąg (nazywany "solą") jest dodawany do każdego hasła, a następnie stosowane jest szyfrowanie. Zasadniczo nie ma znaczenia, w której sekwencji dodajesz "sól" i zaszyfrujesz. Wszystkie te połączenia są równe siły kodowania:

HASH (Pass & Salt) OR HASH (HASH (Pass)+Salt)) OR HASH (HASH (Pass) + HASH (Salt))

Sól przechowywane w oddzielnej tabeli postaci zwykłego tekstu. Inną rzeczą, którą można zrobić, jest zaszyfrowanie tej samej wartości kilka razy z rzędu. Małe opóźnienie dla jednego użytkownika nie będzie zauważalne, ale zwiększy wysiłek potrzebny do brutalnego wymuszenia hasła.

Jest to również dobra praktyka, aby tabel nazwa więc nazwy tabel nie można odgadnąć. Sprawia, że ​​ślepe ataki są trudniejsze, gdy nie mogą od razu uzyskać tabeli z hasłami.

Jeśli chodzi o sposób szyfrowania ciągu znaków.

SQL Server 2000 Brak wbudowanych funkcji symetrycznych. Istnieją 2 asymetryczne wbudowane funkcje: BINARY_CHECKSUM i CHECKSUM.

VB VB daje już zaimplementowane algorytmy, a także narzędzia do własnej implementacji. Artykuł wspomniany przez @SuperFunkyMonkey zawiera łącza do Security.Cryptography Namespace. Innym algorytmem symetrycznym (takim, który można dekodować) jest Rijndael.

1

Pozwól mi zacząć od wskazania, że ​​wspomniałeś, że to było dla hasła. Właściwa ochrona haseł jest złożonym tematem, ale przy absolutnym minimum sugerowałbym solenie i mieszanie ich. SQL Server zawiera funkcję skrótu (pwdencrypt był w SQL Server 2000, ale nie był udokumentowany do późniejszych wersji.Najstarsze wersje zawierają Hashbytes, który ma więcej opcji), ale ta funkcja hash nie jest najbezpieczniejsza i powinieneś spojrzeć na inne opcje.

Używanie hasha zamiast szyfrowania narusza jedno z podanych wymagań, aby móc odszyfrować te zaszyfrowane pola, ale z hasłami zwykle uważa się, że lepiej nie móc ich odszyfrować. (Możesz porównać wartość hashowaną z hasłem wprowadzonym przez użytkownika, również hashując, po prostu nie można go łatwo odszyfrować, aby odzyskać wersję tekstową.)

Jeśli naprawdę chcesz je zaszyfrować, spójrz na w przestrzeni nazw System.Security.Cryptography i klasie Simple3Des, w szczególności w VB. Tutaj jest dokumentacja i opis szyfrowania napisów w programie here.

Powiązane problemy