2010-10-14 40 views
5

Tôi đang sử dụng tính năng được tích hợp sẵn Visual C# Cài đặt để lưu một số tùy chọn của chương trình của tôi. Tôi cũng muốn lưu trữ một mật khẩu, nhưng sau đó nó đến công khai ... là nó có thể mã hóa mật khẩu trước khi lưu nó bằng cách sử dụng phương pháp cài đặt này và sau đó giải mã nó trở lại?Phương pháp hay nhất khi lưu mật khẩu bằng tính năng Cài đặt C# là gì?

+0

https://crackstation.net/hashing-security.htm – Soren

Trả lời

4

Đối với nhu cầu mã hóa đơn giản, tôi đã sử dụng DPAPI qua lớp ProtectedData. Để làm cho giá trị được mã hóa kết quả có thể lưu trữ được trong một tệp văn bản hoặc đăng ký, tôi mã hóa mảng byte kết quả.

Đây là lớp tôi đã viết để bọc này lên:

namespace SomeNamespace 
{ 
    using System; 
    using System.Security.Cryptography; 
    using System.Text; 

    /// <summary> 
    /// used for encryption and decryption 
    /// </summary> 
    public static class DataProtector 
    { 
     private const string EntropyValue = "secret"; 

     /// <summary> 
     /// Encrypts a string using the DPAPI. 
     /// </summary> 
     /// <param name="stringToEncrypt">The string to encrypt.</param> 
     /// <returns>The encrypted data.</returns> 
     public static string EncryptData(string stringToEncrypt) 
     { 
     byte[] encryptedData = ProtectedData.Protect(Encoding.Unicode.GetBytes(stringToEncrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine); 
     return Convert.ToBase64String(encryptedData); 
     } 

     /// <summary> 
     /// Decrypts a string using the DPAPI. 
     /// </summary> 
     /// <param name="stringToDecrypt">The string to decrypt.</param> 
     /// <returns>The decrypted data.</returns> 
    public static string DecryptData(string stringToDecrypt) 
     { 
     byte[] decryptedData = ProtectedData.Unprotect(Convert.FromBase64String(stringToDecrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine); 
     return Encoding.Unicode.GetString(decryptedData); 
     } 
    } 
} 
+0

Có, nhờ mã của bạn, tôi quản lý để làm điều đó một mình ... Tôi yêu bạn !!! –

2

Nếu bạn mã hóa mật khẩu, bạn sẽ vẫn phải lưu trữ khóa giải mã ở đâu đó trong chương trình, do đó, nó vẫn đảm bảo an toàn do tối nghĩa.

Tuy nhiên, nó sẽ giữ cho những người trung thực trung thực. Thực tế phổ biến nhất mà tôi đã thấy là hệ thống thách thức/phản hồi, nơi người dùng đặt tên đăng ký, chương trình cung cấp chuỗi thách thức và bạn gửi cho họ chuỗi phản hồi tương ứng (được mã hóa), người dùng cắt và dán vào hộp thoại đăng ký trong chương trình. Chương trình giải mã phản hồi, so sánh nó với thử thách, và tắt bạn đi.

Tất nhiên, vì bạn vẫn phải cung cấp mật khẩu giải mã trong chính chương trình, nó vẫn có thể bị đánh bại bởi một hacker xác định.

4

Cách đơn giản để thực hiện việc này là tự mã hóa mật khẩu. Bạn sẽ không bao giờ có thể không mã hóa nó, nhưng bạn sẽ có thể so sánh mật khẩu do người dùng nhập vào nó.

+0

1 Tôi thích ý tưởng đó. –

+0

Bạn có thể cho tôi một gợi ý làm thế nào tôi có thể "mã hóa mật khẩu với chính nó" ... Bạn có ý nghĩa gì bởi điều đó? Cảm ơn bạn. –

+1

Tôi nghi ngờ OP muốn lưu trữ mật khẩu để người dùng không cần nhập lại mật khẩu ... Nếu đó là trường hợp, giải pháp này không hữu ích;) –

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