2012-04-10 22 views
8

Potrzebuję przechowywać poufne hasła w kodzie. Nie mogę używać technik mieszania, ponieważ samo hasło jest potrzebne. Jak mogę bezpiecznie przechowywać te dane w pliku app.config?Czy plik app.config jest bezpiecznym miejscem do przechowywania haseł?

Czy są inne sposoby, w jakie mogę to bezpiecznie wykonać?

Klasa DPAPI i ProtectData nie jest opcją, ponieważ klucze są specyficzne dla systemu, np .: ciągi połączenia nie mogą być przechowywane w ten sposób dla różnych systemów użytkownika końcowego.

+6

Jak się hasła 'potrzebne'? Może być bardziej praktyczne wyeliminowanie tego błędu. –

+2

Dlaczego nie możesz zapisać skrótu? W jaki sposób używane są hasła? –

+2

Mam dobry pomysł, Google Encrypt Ustawienia konfiguracji ... http://msdn.microsoft.com/en-us/library/ie/dtkwfdky.aspx – Lloyd

Odpowiedz

7

Możesz użyć DPAPI (API ochrony danych), aby zaszyfrować określoną sekcję plików konfiguracyjnych. Twój kod nadal będzie korzystał z Menedżera konfiguracji i odszyfrowanie zostanie potraktowane przez strukturę. Więcej informacji na temat samo odnosi się do tego wzorców i praktyk dokumentu How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI

aktualizacji

Aby zaszyfrować lub odszyfrować informacje z Twojego kodu można użyć ProtectedData.Protect & ProtectedData.Unprotect. Można go uruchomić jako część niestandardowej akcji w instalatorze lub gdy użytkownik wprowadza poświadczenia podczas korzystania z aplikacji.

Przykładowy kod

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

Mylisz się, Ta metoda jest użyteczna tylko dla pliku Web.config. Ponieważ klucze DPAPI są specyficzne dla systemu, poprawne odszyfrowanie nie zostanie osiągnięte w różnych systemach różnych użytkowników końcowych. – techno

+1

@techno należy uruchomić niestandardową akcję instalatora, która byłaby potrzebna podczas instalacji lub gdy użytkownik wprowadzi szczegóły po raz pierwszy. Zaktualizowano moją odpowiedź za pomocą kodu przykładowego. – Ramesh

+0

Nie jest to możliwe w przypadku ciągów połączeń – techno

Powiązane problemy