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/....
InformationsquelleAutor Rex Hardin | 2012-11-29