2012-04-10 36 views
8

Tôi cần lưu mật khẩu bảo mật trong mã. Tôi không thể sử dụng các kỹ thuật băm nhỏ vì chính mật khẩu là cần thiết. Làm cách nào để lưu trữ những dữ liệu này một cách an toàn trong tệp app.config?Tệp app.config có phải là nơi an toàn để lưu trữ mật khẩu không?

Có cách nào khác để tôi có thể thực hiện điều này một cách an toàn không?

Lớp DPAPI và lớp ProtectData không phải là một tùy chọn vì các khóa là hệ thống cụ thể, ví dụ: các chuỗi kết nối không thể được lưu trữ theo cách này cho các hệ thống người dùng cuối khác nhau.

+6

thế nào là mật khẩu 'cần thiết'? Nó có thể là thực tế hơn để loại bỏ lỗi _that_. –

+2

Tại sao bạn không thể lưu trữ một băm thay thế? Các mật khẩu được sử dụng như thế nào? –

+2

Tôi có ý tưởng hay, Cài đặt cấu hình Google Encrypt ... http://msdn.microsoft.com/en-us/library/ie/dtkwfdky.aspx – Lloyd

Trả lời

7

Bạn có thể sử dụng DPAPI (API bảo vệ dữ liệu) để mã hóa phần nhất định của tệp cấu hình của bạn. Mã của bạn vẫn sẽ sử dụng ConfigurationManager và giải mã sẽ được khung công tác chăm sóc. Để biết thêm thông tin về cùng tham khảo này mô hình và thực hành tài liệu How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI

Cập nhật

Để mã hóa hoặc giải mã thông tin từ mã của bạn, bạn có thể sử dụng ProtectedData.Protect & ProtectedData.Unprotect. Điều này có thể được chạy như là một phần của hành động tùy chỉnh trong trình cài đặt của bạn hoặc khi người dùng nhập thông tin đăng nhập khi sử dụng ứng dụng của bạn.

Mẫu Mã

class SecureStringManager 
{ 
    readonly Encoding _encoding = Encoding.Unicode; 

    public string Unprotect(string encryptedString) 
    { 
     byte[] protectedData = Convert.FromBase64String(encryptedString); 
     byte[] unprotectedData = ProtectedData.Unprotect(protectedData, 
      null, DataProtectionScope.CurrentUser); 

     return _encoding.GetString(unprotectedData); 
    } 

    public string Protect(string unprotectedString) 
    { 
     byte[] unprotectedData = _encoding.GetBytes(unprotectedString); 
     byte[] protectedData = ProtectedData.Protect(unprotectedData, 
      null, DataProtectionScope.CurrentUser); 

     return Convert.ToBase64String(protectedData); 
    } 
}  
+0

Bạn sai, Phương pháp này chỉ hữu ích đối với tệp Web.config. Vì các khóa DPAPI là hệ thống giải mã chính xác cụ thể sẽ không đạt được trong các hệ thống khác nhau của người dùng cuối khác nhau – techno

+1

@techno, bạn nên chạy một hành động cài đặt tùy chỉnh sẽ làm việc cần thiết trong khi cài đặt hoặc khi người dùng nhập chi tiết lần đầu tiên. Đã cập nhật câu trả lời của tôi với Mã mẫu. – Ramesh

+0

Điều này là không thể đối với các chuỗi kết nối – techno

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