2015-11-27 1 views

Répondre

2

Vous ne pouvez pas , by definition:

Notez que SecureString n'a pas de membres qui inspectent, comparer ou convertir la valeur d'un SecureString. L'absence de tels membres aide à protéger la valeur de l'instance contre une exposition accidentelle ou malveillante. Utilisez les membres appropriés de la classe System.Runtime.InteropServices.Marshal, tels que la méthode SecureStringToBSTR, pour manipuler la valeur d'un objet SecureString.

Une fois que vous obtenez une valeur, vous ne pouvez pas l'enlever.

: À moins que vous êtes prêt à commencer à utiliser le code non managé en utilisant Marshal.SecureStringToBSTR, mais qui défie l'usage de SecureString ...

+0

alors il semble que je doive accepter qu'il n'y aura aucun moyen de le faire en toute sécurité – WiiMaxx

+1

Non sauf si vous décidez de passer au crible la mémoire non gérée avec 'SecureStringToBSTR' (et n'oubliez pas de nettoyer après toi-même). Mais cela vaut-il la peine d'utiliser 'SecureString' dans votre scénario? Est-ce que cela apporte vraiment une sécurité supplémentaire? (En passant, un sel cryptographique [est censé être public] (http://crypto.stackexchange.com/q/1776).) – Albireo

+0

vous avez raison, parfois je fais de la muse à beaucoup et perdre le focus de l'ensemble – WiiMaxx

0

Un travail autour peut utiliser la classe System.Runtime.InteropServices.Marshal comme décrit dans this réponse à convertissez la chaîne sécurisée en chaîne, ajoutez les deux chaînes et convertissez la chaîne concaténée en chaîne sécurisée

+0

cela détruirait l'utilisation d'un 'SecureString' – WiiMaxx

+0

vrai mais s'il n'y a pas d'autre moyen que il y aura un compromis entre la sécurité et faire le travail – Kayani

+1

Convertir un' SecureString' en un 'String' complètement défait le but d'utiliser un SecureString en premier lieu. La seule façon raisonnable de les manipuler consiste à manipuler la mémoire directement (deuxième extrait dans la réponse à la question que vous avez liée). – Albireo