Jak przekonwertować String
na SecureString
?
c#
.net
security
securestring
Deweloper404
źródło
źródło
Array.Clear
Odpowiedzi:
Ty nie. Cały powód używania obiektu SecureString polega na tym, aby uniknąć tworzenia obiektu typu string (który jest ładowany do pamięci i przechowywany w postaci zwykłego tekstu do czasu wyczyszczenia). Możesz jednak dodawać znaki do SecureString, dołączając je.
źródło
12345
… takie rzeczy ma idiota w swoim bagażu!”*****
AppendChar
nie jest wykonywany przed uruchomieniem, więc te znaki można nadal odczytać z IL, prawda? Może przydałoby się również zaciemnianie w czasie kompilacji ... to znaczy, jeśli na stałe wpisujesz hasła.Istnieje również inny sposób konwersji między
SecureString
iString
.1. Ciąg do SecureString
2. SecureString to String
Oto link
źródło
SecureString
jeśli twój kod tworzystring
obiekt o wartości, którą chcesz zabezpieczyć. CelemSecureString
jest uniknięcie umieszczenia ciągu w zarządzanej pamięci, aby osoba atakująca badająca tę pamięć mogła wykryć wartość, którą chcesz ukryć. PonieważNetworkCredential
konstruktor, który wywołujesz, wymaga ciągu, to nie jest droga ... Jasne, twój kod jest łatwym sposobem na konwersję do iz SecureString, ale użycie go sprawia, że twój kod jest tak bezpieczny, jak użycie prostegostring
SecureString
podczas pracy z niektórymi bibliotekami. I bądźmy szczerzy, jeśli ktoś aktywnie skanuje pamięć twojej aplikacji, to już przegrałeś. Nawet jeśli poprawnie użyłeś SecureString, czego nigdy nie widziałem, do wyodrębnienia będą inne cenne dane.poniższa metoda pomaga przekonwertować ciąg na bezpieczny ciąg
źródło
Możesz to śledzić:
źródło
Oto tania sztuczka z linq.
źródło
Wyrzucę to tam. Czemu?
Nie możesz po prostu zmienić wszystkich swoich ciągów na bezpieczne i nagle Twoja aplikacja jest „bezpieczna”. Bezpieczny ciąg został zaprojektowany tak, aby łańcuch był zaszyfrowany tak długo, jak to możliwe, i był odszyfrowywany tylko przez bardzo krótki czas, czyszcząc pamięć po wykonaniu na nim operacji.
Zaryzykowałbym stwierdzenie, że możesz mieć pewne problemy na poziomie projektowym, z którymi musisz się uporać, zanim zaczniesz martwić się o zabezpieczenie ciągów aplikacji. Podaj nam więcej informacji o tym, co próbujesz zrobić, a być może będziemy w stanie pomóc lepiej.
źródło
źródło
bez fantazyjnego linq, nie dodawanie wszystkich znaków ręcznie, po prostu proste i proste:
źródło
var sc = new SecureString(); foreach(char c in "foo") sc.appendChar(c);
Zgadzam się ze Spence (+1), ale jeśli robisz to do nauki lub testowania pourpose, możesz użyć foreach w ciągu, dołączając każdy znak do bezpiecznego łańcucha przy użyciu metody AppendChar.
źródło
Chcę tylko zwrócić uwagę, aby wszyscy ludzie, mówiąc: „To nie jest sens
SecureString
”, że wielu ludzi zadaje to pytanie może być w aplikacji, w którym, niezależnie od przyczyny, uzasadniony, czy nie, są one nie szczególnie zaniepokojony konieczności tymczasowa kopia hasła znajduje się na stercie jako ciąg znaków GC, ale musi używać interfejsu API, który akceptuje tylkoSecureString
obiekty. Masz więc aplikację, w której nic Cię nie obchodziczy hasło jest na stercie, może jest tylko do użytku wewnętrznego, a hasło istnieje tylko dlatego, że jest wymagane przez podstawowe protokoły sieciowe, i okazuje się, że ten ciąg, w którym jest przechowywane hasło, nie może być użyty do np. skonfigurowania zdalnego PowerShell Runspace - ale nie ma łatwego, prostego, jednego liniowca, aby stworzyć toSecureString
, czego potrzebujesz. Jest to drobne niedogodności - ale chyba warto, aby zapewnić, że aplikacje, które naprawdę zrobić musiSecureString
nie kusił autorów do użyciaSystem.String
lubSystem.Char[]
pośredników. :-)źródło
Jeśli chcesz skompresować konwersję a
string
do aSecureString
wLINQ
instrukcję, możesz to wyrazić w następujący sposób:Należy jednak pamiętać, że używanie
LINQ
nie poprawia bezpieczeństwa tego rozwiązania. Cierpi na tę samą wadę, co każda konwersja zstring
naSecureString
. Dopóki oryginałstring
pozostaje w pamięci, dane są podatne na ataki.Mając to na uwadze, powyższe oświadczenie może zaoferować utrzymanie razem tworzenia pliku
SecureString
, jego inicjalizację z danymi i ostatecznie zablokowanie go przed modyfikacją.źródło
Poniższe 2 rozszerzenia powinny załatwić sprawę:
Dla
char
tablicyI dla
string
Podziękowania dla Johna Dagga za
AppendChar
rekomendację.źródło
możesz użyć tego prostego skryptu
źródło