Utiliser SecureSsortingng

Est-ce que cela peut être simplifié à un seul paquebot? N’hésitez pas à le réécrire complètement tant que secureSsortingng est initialisé correctement.

SecureSsortingng secureSsortingng = new SecureSsortingng (); foreach (char c in "fizzbuzz".ToCharArray()) { secureSsortingng.AppendChar (c); } 

Vous pourriez utiliser Linq:

 "fizzbuzz".ToCharArray ().ToList ().ForEach ( p => secureSsortingng.AppendChar ( p ) ); 

Utilisez simplement NetworkCredential. Il a la logique de conversion intégrée.

 SecureSsortingng ss = new NetworkCredential("", "fizzbuzz").SecurePassword; 

Comme d’autres l’ont noté, toutes ces techniques suppriment les avantages de SecureSsortingng sur le plan de la sécurité, mais dans certaines situations (telles que les tests unitaires), cela peut être acceptable.

Mettre à jour:

Comme indiqué dans les commentaires, NetworkCredential peut également être utilisé pour reconvertir un SecureSsortingng en chaîne.

 ssortingng s = new NetworkCredential("", ss).Password; 

Outre l’utilisation d’un code non sécurisé et d’un caractère char* , il n’y a pas de meilleure solution.

Le point ici n’est pas de copier le contenu de SecureSsortingng vers / depuis des chaînes normales. La constante "fizzbuzz" constante est la fuite de sécurité ici.

Légère amélioration de la réponse de Sascha en remplaçant le lambda par un groupe de méthodes

 "fizzbuzz".ToCharArray().ToList().ForEach(ss.AppendChar); 
 var s = "fizzbuzz".Aggregate(new SecureSsortingng(), (ss, c) => { ss.AppendChar(c); return ss; }); 

Voici comment la classe NetworkCredential de .NET le fait:

 SecureSsortingng secureSsortingng; fixed (char* chPtr = plainSsortingng) secureSsortingng = new SecureSsortingng(chPtr, plainSsortingng.Length); 

Moche mais probablement le plus efficace.

Depuis que SecureSsortingng utilise l’interface IDispose . Vous pourriez réellement le faire comme ça.

 SecureSsortingng secure = new SecureSsortingng(); foreach(var character in data.ToCharArray()) secure.AppendChar(character); 

Les data seraient essentiellement un paramètre.

Si vous using l’ using pour alléger les ressources; vous voulez faire attention à la scope. Mais cela peut être une alternative bénéfique, en fonction de l’utilisation.

Mettre à jour:

Vous pouvez réellement faire une signature de méthode complète:

 public static SecureSsortingng ConvertSsortingngToSecureSsortingng(this ssortingng data) { var secure = new SecureSsortingng() foreach(var character in data.ToCharArray()) secure.AppendChar(character); secure.MakeReadOnly(); return secure; } 

Pour le décryptage que vous souhaitez faire:

 public static ssortingng ConvertSecureSsortingngToSsortingng(this SecureSsortingng data) { var pointer = IntPtr.Zero; try { pointer = Marshal.SecureSsortingngToGlobalAllocUnicode(data); return Marshal.PtrToSsortingngUni(pointer); } finally { Marshal.ZeroFreeGlobalAllocUnicode(pointer); } } 

L’ article suivant vous donnera également des informations supplémentaires.

moins de code car .ToList() n’est pas requirejs pour cela:

 Array.ForEach("fizzbuzz".ToCharArray(), secureSsortingng.AppendChar);