Convertir une chaîne en SecureSsortingng

Comment convertir Ssortingng en SecureSsortingng ?

Vous ne le faites pas Toute la raison d’utiliser l’object SecureSsortingng est d’éviter de créer un object chaîne (qui est chargé en mémoire et conservé en texte brut jusqu’à la récupération de la mémoire). Cependant, vous pouvez append des caractères à un SecureSsortingng en les ajoutant.

 var s = new SecureSsortingng(); s.AppendChar('d'); s.AppendChar('u'); s.AppendChar('m'); s.AppendChar('b'); s.AppendChar('p'); s.AppendChar('a'); s.AppendChar('s'); s.AppendChar('s'); s.AppendChar('w'); s.AppendChar('d'); 

Il existe également un autre moyen de convertir entre SecureSsortingng et Ssortingng .

1. Chaîne à SecureSsortingng

 SecureSsortingng theSecureSsortingng = new NetworkCredential("", "myPass").SecurePassword; 

2. SecureSsortingng to Ssortingng

 ssortingng theSsortingng = new NetworkCredential("", theSecureSsortingng).Password; 

Voici le lien

la méthode ci-dessous aide à convertir la chaîne en chaîne sécurisée

 private SecureSsortingng ConvertToSecureSsortingng(ssortingng password) { if (password == null) throw new ArgumentNullException("password"); var securePassword = new SecureSsortingng(); foreach (char c in password) securePassword.AppendChar(c); securePassword.MakeReadOnly(); return securePassword; } 

Vous pouvez suivre ceci:

 ssortingng password = "test"; SecureSsortingng sec_pass = new SecureSsortingng(); Array.ForEach(password.ToArray(), sec_pass.AppendChar); sec_pass.MakeReadOnly(); 

Je vais jeter ça là-bas. Pourquoi?

Vous ne pouvez pas simplement changer toutes vos chaînes pour sécuriser les chaînes et soudain, votre application est “sécurisée”. La chaîne sécurisée est conçue pour conserver la chaîne cryptée le plus longtemps possible et ne peut être déchiffrée que pendant une très courte période, en effaçant la mémoire après une opération.

Je dirais que vous avez peut-être des problèmes de conception à régler avant de vous soucier de la sécurité de vos chaînes d’application. Donnez-nous plus d’informations sur ce que vous essayez de faire et nous pourrons peut-être mieux vous aider.

 unsafe { fixed(char* psz = password) return new SecureSsortingng(psz, password.Length); } 

Voici un truc linq pas cher.

  SecureSsortingng sec = new SecureSsortingng(); ssortingng pwd = "abc123"; /* Not Secure! */ pwd.ToCharArray().ToList().ForEach(c => sec.AppendChar(c)); /* and now : seal the deal */ sec.MakeReadOnly(); 

Je suis d’accord avec Spence (+1), mais si vous le faites pour apprendre ou tester pourpose, vous pouvez utiliser un foreach dans la chaîne, en ajoutant chaque char à la méthode de sécurité en utilisant la méthode AppendChar.

pas de linq sophistiqué, ne pas append tous les caractères à la main, simplement et simplement:

 var str = "foo"; var sc = new SecureSsortingng(); foreach(char c in str) sc.appendChar(c); 

Si vous souhaitez compresser la conversion d’une ssortingng en SecureSsortingng en une instruction LINQ , vous pouvez l’exprimer comme suit:

 var plain = "The quick brown fox jumps over the lazy dog"; var secure = plain .ToCharArray() .Aggregate( new SecureSsortingng() , (s, c) => { s.AppendChar(c); return s; } , (s) => { s.MakeReadOnly(); return s; } ); 

Cependant, gardez à l’esprit que l’utilisation de LINQ n’améliore pas la sécurité de cette solution. Il souffre de la même faille que toute conversion de ssortingng en SecureSsortingng . Tant que la ssortingng origine rest en mémoire, les données sont vulnérables.

Cela étant dit, ce que l’énoncé ci-dessus peut offrir, c’est de garder ensemble la création de SecureSsortingng , son initialisation avec les données et finalement de la bloquer de toute modification.

Les 2 extensions suivantes devraient faire l’affaire:

  1. Pour un tableau de caractères

     public static SecureSsortingng ToSecureSsortingng(this char[] _self) { SecureSsortingng knox = new SecureSsortingng(); foreach (char c in _self) { knox.AppendChar(c); } return knox; } 
  2. Et pour la ssortingng

     public static SecureSsortingng ToSecureSsortingng(this ssortingng _self) { SecureSsortingng knox = new SecureSsortingng(); char[] chars = _self.ToCharArray(); foreach (char c in chars) { knox.AppendChar(c); } return knox; } 

Merci à John Dagg pour la recommandation AppendChar .

vous pouvez utiliser ce script simple

 private SecureSsortingng SecureSsortingngConverter(ssortingng pass) { SecureSsortingng ret = new SecureSsortingng(); foreach (char chr in pass.ToCharArray()) ret.AppendChar(chr); return ret; } 

Je veux juste faire remarquer à tous ceux qui disent: «Ce n’est pas le but de SecureSsortingng », que beaucoup de personnes qui posent cette question pourraient se trouver dans une application où, pour quelque raison que ce soit, justifiée ou non, avoir une copie temporaire du mot de passe se trouve sur le tas en tant que chaîne SecureSsortingng GC, mais ils doivent utiliser une API qui accepte SecureSsortingng objects SecureSsortingng . Donc, vous avez une application où vous ne vous souciez pas de savoir si le mot de passe est sur le tas, peut-être uniquement à usage interne et le mot de passe est seulement parce qu’il est requirejs par les protocoles réseau sous-jacents. est stocké ne peut pas être utilisé par exemple pour configurer un PowerShell Runspace distant – mais il n’existe pas de fonction simple pour créer ce SecureSsortingng dont vous avez besoin. C’est un inconvénient mineur – mais cela en vaut probablement la peine pour s’assurer que les applications qui ont réellement besoin de SecureSsortingng pas les auteurs à utiliser les intermédiaires System.Ssortingng ou System.Char[] . 🙂

Une approche plus simple qui peut être utilisée:

 # Take password and convert it to a secure ssortingng $mySS = "MyCurrentPassword" | ConvertTo-SecureSsortingng -AsPlainText -Force