Comment convertir String
en SecureString
?
c#
.net
security
securestring
Développeur404
la source
la source
12345
... c'est le genre de chose qu'un idiot a sur ses bagages!"*****
AppendChar
ne s'exécute pas avant l'exécution, donc ces caractères peuvent toujours être lus à partir de l'IL, n'est-ce pas? Peut-être qu'un obscurcissement lors de la compilation aiderait également ... c'est-à-dire si vous codez en dur des mots de passe.Il existe également une autre façon de convertir entre
SecureString
etString
.1. Chaîne à SecureString
2. SecureString à String
Voici le lien
la source
SecureString
si votre code crée unstring
objet avec la valeur que vous souhaitez sécuriser. Le but deSecureString
est d'éviter d'avoir la chaîne dans la mémoire gérée, afin qu'un attaquant examinant cette mémoire puisse repérer la valeur que vous souhaitez masquer. Étant donné que leNetworkCredential
constructeur que vous appelez nécessite une chaîne, ce n'est pas la voie à suivre ... Bien sûr, votre code est un moyen facile de convertir vers et depuis un SecureString, mais son utilisation rend votre code aussi sûr que l'utilisation d'un simplestring
SecureString
lorsque nous travaillons avec certaines bibliothèques. Et soyons honnêtes ici, si quelqu'un scanne activement la mémoire de votre application, vous avez déjà perdu. Même si vous avez utilisé correctement SecureString, ce que je n'ai jamais vu, il y aura d'autres données précieuses à extraire.La méthode ci-dessous permet de convertir une chaîne en chaîne sécurisée
la source
Vous pouvez suivre ceci:
la source
Voici une astuce linq bon marché.
la source
Je vais jeter ça là-bas. Pourquoi?
Vous ne pouvez pas simplement changer toutes vos chaînes en chaînes sécurisées et soudainement votre application est "sécurisée". La chaîne sécurisée est conçue pour garder la chaîne cryptée aussi longtemps que possible, et uniquement décryptée pendant une très courte période de temps, effaçant la mémoire après qu'une opération a été effectuée sur elle.
Je risquerais de dire que vous pourriez avoir des problèmes au niveau de la conception à résoudre avant de vous soucier de la sécurisation 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.
la source
la source
pas de linq fantaisie, ne pas ajouter tous les caractères à la main, simplement et simplement:
la source
var sc = new SecureString(); foreach(char c in "foo") sc.appendChar(c);
Je suis d'accord avec Spence (+1), mais si vous le faites pour apprendre ou tester des pourposes, vous pouvez utiliser un foreach dans la chaîne, en ajoutant chaque caractère à la chaîne de sécurité en utilisant la méthode AppendChar.
la source
Je veux juste signaler à toutes les personnes qui disent: "Ce n'est pas le but de
SecureString
", que bon nombre des personnes qui posent cette question peuvent se trouver dans une application où, pour une raison quelconque, justifiée ou non, elles ne sont pas particulièrement préoccupées par le fait d'avoir une copie temporaire du sit mot de passe sur le tas comme une chaîne de GC-mesure, mais ils doivent utiliser une API qui n'accepte des objets. Donc, vous avez une application où vous ne vous souciez pasSecureString
si le mot de passe est sur le tas, peut-être qu'il est à usage interne uniquement et le mot de passe est uniquement là parce qu'il est requis par les protocoles réseau sous-jacents, et vous trouvez que cette chaîne où le mot de passe est stocké ne peut pas être utilisée pour, par exemple, configurer un PowerShell distant Runspace - mais il n'y a pas de one-liner simple et simple pour créer ceSecureString
dont vous avez besoin. Il est un inconvénient mineur - mais probablement la peine de veiller à ce que les applications qui vraiment font besoin d'SecureString
ne pas tenter les auteurs à l' utilisationSystem.String
ouSystem.Char[]
intermédiaires. :-)la source
Si vous souhaitez compresser la conversion de a
string
en aSecureString
en uneLINQ
instruction, vous pouvez l'exprimer comme suit:Cependant, gardez à l'esprit que l'utilisation
LINQ
n'améliore pas la sécurité de cette solution. Il souffre du même défaut que toute conversion destring
versSecureString
. Tant que l'originalstring
reste en mémoire, les données sont vulnérables.Cela étant dit, ce que l'instruction ci-dessus peut offrir est de garder ensemble la création du
SecureString
, son initialisation avec des données et enfin le verrouiller contre toute modification.la source
Les 2 extensions suivantes devraient faire l'affaire:
Pour un
char
tableauEt pour
string
Merci à John Dagg pour la
AppendChar
recommandation.la source
vous pouvez utiliser ce simple script
la source