Wie konvertiere ich String
zu SecureString
?
c#
.net
security
securestring
Entwickler404
quelle
quelle
12345
... so etwas hat ein Idiot auf seinem Gepäck!"*****
AppendChar
wird erst zur Laufzeit ausgeführt, sodass diese Zeichen immer noch aus der IL gelesen werden können, richtig? Vielleicht hilft auch eine Verschleierung während der Kompilierung, wenn Sie Kennwörter fest codieren.Es gibt auch eine andere Möglichkeit, zwischen
SecureString
und zu konvertierenString
.1. String zu SecureString
2. SecureString to String
Hier ist der Link
quelle
SecureString
wenn Ihr Code einstring
Objekt mit dem Wert erstellt, den Sie sichern möchten. Das Ziel vonSecureString
besteht darin, zu vermeiden, dass sich die Zeichenfolge im verwalteten Speicher befindet, damit ein Angreifer, der diesen Speicher untersucht, den Wert erkennen kann, den Sie ausblenden möchten. Da derNetworkCredential
Konstruktor Sie eine Zeichenfolge fordern erfordert, die nicht die Art und Weise ist zu gehen ... Sicher, ist der Code eine einfache Möglichkeit , zu und von einem Secure zu konvertieren, aber es macht den Code so sicher wie mit einem einfachen Verwendungstring
SecureString
wenn wir mit einigen Bibliotheken arbeiten. Und seien wir ehrlich, wenn jemand aktiv den Speicher Ihrer Anwendung scannt, haben Sie bereits verloren. Selbst wenn Sie SecureString richtig verwendet haben, was ich noch nie gesehen habe, müssen andere wertvolle Daten extrahiert werden.Die folgende Methode hilft beim Konvertieren von Zeichenfolgen in sichere Zeichenfolgen
quelle
Sie können dies folgen:
quelle
Hier ist ein billiger Linq-Trick.
quelle
Ich werde das da rauswerfen. Warum?
Sie können nicht einfach alle Ihre Zeichenfolgen in sichere Zeichenfolgen ändern, und plötzlich ist Ihre Anwendung "sicher". Die sichere Zeichenfolge dient dazu, die Zeichenfolge so lange wie möglich verschlüsselt und nur für einen sehr kurzen Zeitraum zu entschlüsseln, wodurch der Speicher gelöscht wird, nachdem eine Operation ausgeführt wurde.
Ich würde riskieren zu sagen, dass Sie möglicherweise einige Probleme auf Designebene haben, bevor Sie sich Gedanken über die Sicherung Ihrer Anwendungszeichenfolgen machen. Geben Sie uns weitere Informationen darüber, was Sie versuchen, und wir können Ihnen möglicherweise besser helfen.
quelle
quelle
Keine ausgefallene Linq, nicht alle Zeichen von Hand hinzufügen, einfach und schlicht:
quelle
var sc = new SecureString(); foreach(char c in "foo") sc.appendChar(c);
Ich bin mit Spence (+1) einverstanden, aber wenn Sie dies zum Lernen oder Testen von Pourposes tun, können Sie ein foreach in der Zeichenfolge verwenden und jedes Zeichen mit der AppendChar-Methode an den Sicherheitsring anhängen.
quelle
Ich möchte nur alle Leute darauf hinweisen, die sagen: "Das ist nicht der Punkt von
SecureString
", dass viele der Leute, die diese Frage stellen, sich in einer Bewerbung befinden, in der sie, aus welchem Grund auch immer, gerechtfertigt oder nicht, nicht besonders besorgt sind Eine temporäre Kopie des Kennworts befindet sich als GC-fähige Zeichenfolge auf dem Heap. Sie müssen jedoch eine API verwenden, die nurSecureString
Objekte akzeptiert . Sie haben also eine App, die Sie nicht interessiertUnabhängig davon, ob sich das Kennwort auf dem Heap befindet, ist es möglicherweise nur für den internen Gebrauch bestimmt und das Kennwort ist nur vorhanden, da es von den zugrunde liegenden Netzwerkprotokollen benötigt wird. Sie können feststellen, dass diese Zeichenfolge, in der das Kennwort gespeichert ist, nicht zum Einrichten einer Remote-PowerShell verwendet werden kann Runspace - aber es gibt keinen einfachen, unkomplizierten Einzeiler, um das zu erstellen,SecureString
was Sie benötigen. Es ist eine kleine Unannehmlichkeit - aber wahrscheinlich lohnt sich , um sicherzustellen , dass die Anwendungen , die wirklich tun müssen ,SecureString
um den Einsatz nicht dazu verleiten , die Autoren tunSystem.String
oderSystem.Char[]
Vermittler. :-)quelle
Wenn Sie die Konvertierung von a
string
in aSecureString
in eineLINQ
Anweisung komprimieren möchten, können Sie dies wie folgt ausdrücken:Beachten Sie jedoch, dass die Verwendung
LINQ
die Sicherheit dieser Lösung nicht verbessert. Es leidet unter dem gleichen Fehler wie jede Konvertierung vonstring
nachSecureString
. Solange das Originalstring
im Speicher bleibt, sind die Daten anfällig.Abgesehen davon kann die obige Aussage die Erstellung der
SecureString
, ihre Initialisierung mit Daten zusammenhalten und sie schließlich vor Änderungen schützen.quelle
Die folgenden 2 Erweiterungen sollten den Trick machen:
Für ein
char
ArrayUnd für
string
Vielen Dank an John Dagg für die
AppendChar
Empfehlung.quelle
Sie können dieses einfache Skript verwenden
quelle