2013-05-30 35 views
7

Tôi đang sử dụng SQL 2000. Cột chuỗi 'Mật khẩu' có trong bảng 'Người dùng'. Nó có khoảng 3k hàng. Yêu cầu của tôi là mã hóa tất cả các giá trị của cột 'Mật khẩu'. Ngoài ra, tôi có thể giải mã các trường mật khẩu được mã hóa bất cứ khi nào cần.Mã hóa một cột trong SQL 2000 qua mã hoặc tập lệnh SQL

Tôi biết, từ SQL 2005 trở đi, có các nhà chức năng trong xây dựng cho các yêu cầu này. Nhưng tôi quan tâm đến SQL 2000.

Vui lòng đề nghị nếu có bất kỳ cách nào để đạt được yêu cầu của tôi thông qua mã VB hoặc tập lệnh SQL. KHÔNG với bất kỳ công cụ của bên thứ ba nào. Tôi đã tìm kiếm nhiều nơi nhưng không thành công.

Cảm ơn.

+1

'VB6' hoặc 'VB.NET'? Dù bằng cách nào tôi cũng chắc chắn rằng Google sẽ có rất nhiều kết quả cho nó. Tại sao mã hóa phải được đảo ngược? Nó là bình thường để chỉ sử dụng một cách băm. –

+0

VB6. Giá trị chuỗi phải được mã hóa đầu tiên. Nhưng, khi được yêu cầu trong tương lai, người ta có thể giải mã cùng một giá trị được mã hóa với giá trị chuỗi ban đầu. – Kings

Trả lời

5

Bạn có thể sử dụng không có giấy tờ PWDENCRYPTPWDCOMPARE chức năng có sẵn trong 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 

liên kết tham khảo -

1

Mật khẩu thường được lưu trữ bằng băm 1 chiều (ví dụ SHA1), có nghĩa là chúng được mã hóa và không bao giờ cần phải được giải mã. Khi người dùng nhập mật khẩu, mã của bạn sẽ băm nó và kiểm tra xem giá trị băm có khớp với giá trị băm trong cơ sở dữ liệu hay không.

Tuy nhiên, có vẻ như bạn có yêu cầu cũng có thể giải mã mật khẩu. Đối với điều đó có một số thuật toán không đối xứng (RSA, PGP, vv), nơi bạn sẽ có một cặp khóa riêng và khóa công khai. Khóa riêng tư được giữ bí mật, trong khi khóa công khai có thể được chia sẻ cho người khác để có thể mã hóa thông tin của riêng họ trước khi gửi cho bạn. Có vẻ như đó là quá mức cần thiết vì mã VB6 của bạn chỉ cần mã hóa dữ liệu chứ không phải bất kỳ bên thứ ba nào. Vì vậy, bạn có thể chỉ cần sử dụng một thuật toán đối xứng (như Blowfish hoặc TripleDES), nơi bạn sử dụng cùng một mật khẩu (thay vì một cặp khóa) để mã hóa và giải mã dữ liệu. Cụm mật khẩu đó có thể được lưu trữ trong một tệp cấu hình trên máy chủ. Hãy chắc chắn để bảo vệ nó khỏi những người dùng trái phép.

Bạn đã xem bài viết này chưa? Nó sử dụng TripleDES với một cụm từ mật khẩu có âm thanh chính xác như những gì bạn cần. http://msdn.microsoft.com/en-us/library/ms172831(v=vs.80).aspx

1

Ngày nay, hành vi này chỉ được coi là thực tế không tốt để tự mã hóa mật khẩu. Thường thì một chuỗi tùy ý (được gọi là "muối") được thêm vào mọi mật khẩu và sau đó mã hóa được áp dụng. Về nguyên tắc nó không quan trọng trong những gì trình tự bạn đang thêm "muối" và mã hóa. Tất cả những kết hợp này đều bình đẳng trong sức mạnh mã hóa:

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

Salt được giữ trong bảng riêng biệt như đồng bằng văn bản. Một điều bạn có thể làm là mã hóa cùng một giá trị nhiều lần trong một hàng. Sự chậm trễ nhỏ cho một người dùng sẽ không đáng chú ý, nhưng nó sẽ làm tăng nỗ lực cần thiết để gây sức ép cho mật khẩu.

Cũng là một cách hay để đặt tên bảng để không thể đoán được tên bảng. Nó làm cho các cuộc tấn công mù trở nên khó khăn hơn khi họ không thể lấy được mật khẩu ngay lập tức.

Như một cách để mã hóa chuỗi.

SQL Server 2000 Không có chức năng đối xứng tích hợp. Có 2 chức năng không đối xứng được tích hợp sẵn: BINARY_CHECKSUMCHECKSUM.

VB VB cung cấp cho bạn các thuật toán đã triển khai cũng như các công cụ để thực hiện của riêng bạn. Bài viết được đề cập bởi @SuperFunkyMonkey có liên kết đến Security.Cryptography Namespace. Một thuật toán đối xứng khác (thuật toán bạn có thể giải mã) là Rijndael.

1

Hãy để tôi bắt đầu bằng cách chỉ ra rằng bạn đã đề cập đến điều này là mật khẩu. Việc bảo vệ mật khẩu đúng cách là một chủ đề phức tạp, nhưng ở mức tối thiểu, tôi sẽ đề nghị sử dụng muối và băm nhỏ chúng. SQL Server bao gồm một hàm băm (pwdencrypt nó là trong SQL Server 2000 nhưng không được tài liệu cho đến các phiên bản sau. Các phiên bản mới nhất bao gồm Hashbytes có nhiều tùy chọn hơn), nhưng hàm băm này không an toàn nhất và bạn nên xem xét tùy chọn.

Sử dụng mã băm thay vì mã hóa vi phạm một trong các yêu cầu đã nêu của bạn để có thể giải mã các trường được mã hóa đó, nhưng với mật khẩu thường được coi là không tốt hơn để giải mã chúng. (Bạn có thể so sánh giá trị băm với mật khẩu do người dùng nhập bằng cách băm mật khẩu, bạn không thể giải mã dễ dàng để khôi phục phiên bản thuần.)

Nếu bạn thực sự muốn mã hóa chúng, hãy xem tại không gian tên System.Security.Cryptography và lớp Simple3Des đặc biệt cho VB. Có tài liệu hướng dẫn ở đây và hướng dẫn về mã hóa chuỗi trong chương trình here.

Các vấn đề liên quan