Comment puis-je utiliser ConvertTo-SecureString
Disons que j'ai besoin de le faire en Powershell:
$SecurePass = Get-Content $CredPath | ConvertTo-SecureString -Key (1..16)
[String]$CleartextPass = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($CredPass));
Le contenu de $CredPath est un fichier qui contient la sortie de ConvertFrom-SecureString -Clés (1..16).
Comment puis-je accomplir le ConvertTo-SecureString -key (1..16)
partie en C#/.NET?
Je sais comment créer un SecureString
, mais je ne suis pas sûr de savoir comment le chiffrement doit être traitée.
Dois-je crypter chaque caractère à l'aide d'AES, ou de déchiffrer la chaîne, puis de créer la chaîne sécurisée par caractère?
Je sais rien à propos de la cryptographie, mais de ce que j'ai recueillis, je pourrais juste envie d'invoquer la commande Powershell à l'aide de C#.
Pour la référence, j'ai trouvé un poste similaire à propos du cryptage/décryptage ici:
À l'aide du cryptage AES en C#
Mise à JOUR
J'ai examiné le lien Keith posté, mais je faire face à d'autres inconnues. Le DecryptStringFromBytes_Aes prend trois arguments:
static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
Le premier argument est un tableau d'octets représente le texte crypté. La question est de savoir comment la chaîne de être représentée dans le tableau d'octets? Devrait-il être représenté avec ou sans codage?
byte[] ciphertext = Encoding.ASCII.GetBytes(encrypted_text);
byte[] ciphertext = Encoding.UTF8.GetBytes(encrypted_text);
byte[] ciphertext = Encoding.Unicode.GetBytes(encrypted_text);
byte[] ciphertext = new byte[encrypted_password.Length * sizeof(char)];
System.Buffer.BlockCopy(encrypted_password.ToCharArray(), 0, text, 0, text.Length);
Le deuxième tableau d'octets est la clé doit être simplement un tableau d'entiers:
byte[] key = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
Le troisième tableau d'octets est un "Vecteur d'Initialisation" - il ressemble à l'Aes.Créer() va générer un byte[] pour IV au hasard. La lecture, j'ai découvert que j'ai peut-être besoin d'utiliser le même IV. Comme ConvertFrom-SecureString et ConvertTo-SecureString sont en mesure de chiffrer/déchiffrer en utilisant simplement la clé, je suis parti avec l'hypothèse que le IV[] peut être aléatoire ou a une définition statique.
Je n'ai pas encore trouvé une combinaison gagnante, mais je vais continuer d'essayer.
- double possible de convertit une Chaîne de SecureString
- L'un de l'autre Mvp PowerShell croit que la chaîne est encodé en Base64. Il semble qu'il y a trois ensembles de données délimité par le
|
char. Le milieu peut être le IV de données. - Hmm, (s)il a peut être raison. Si l'un des trois est un IV et un représente le texte crypté, ce qui serait le troisième délimité par l'élément de l'être? Peut-être le sel de la clé fournie?
- Pour le même problème, mais dans le cas où la clé n'est pas fourni (c'est à dire où ConvertFrom-SecureString a été utilisé sans clé), voir stackoverflow.com/questions/33880731/....
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est un vieux post. Je suis l'affichage de cette exhaustivité et de la postérité, parce que je ne pouvais pas trouver une réponse complète sur MSDN ou stackoverflow. Il sera ici dans le cas où j'ai besoin de le faire de nouveau.
C'est un C# de mise en œuvre de powershell est ConvertTo-SecureString avec le cryptage AES (activé à l'aide de la touche option). Je laisse pour l'exercice de code C# de mise en œuvre de ConvertFrom-SecureString.
Mon travail est de combiner les réponses et la réorganisation de user2748365, la réponse à être plus lisible et en ajoutant des éducation des commentaires! J'ai aussi résolu le problème avec la prise d'une sous-chaîne (au moment de ce post, son code n'a que deux éléments dans strArray.
Selon les docs sur ConvertFrom-SecureString l'algorithme de chiffrement AES est utilisé:
Regarder la DecryptStringFromBytes_Aes exemple dans le MSDN docs.
BTW une option facile serait d'utiliser le PowerShell moteur à partir de C# pour exécuter la
ConvertTo-SecureString
applet de commande pour faire le travail. Sinon, on dirait que le vecteur d'initialisation est intégré quelque part dans le ConvertFrom-SecureString de sortie et peut ou peut ne pas être facile à extraire.Veuillez consulter le code suivant:
Exemple:
Si vous souhaitez obtenir décrypté caractères, veuillez vérifier données dans la méthode.
J'ai trouvé le plus facile et le plus simple a été d'appeler le
ConvertTo-SecureString
de commande PowerShell directement à partir de C#. De cette façon, il n'y a pas de différence dans la mise en œuvre et le résultat est exactement ce que ce serait si vous l'avez appelé à partir de PowerShell directement.Ajoutant à Cheng de réponse - j'ai trouvé, j'ai dû changer:
à
et
à
mais sinon il fonctionne à merveille.