假设我需要在 Powershell 中执行此操作:
$SecurePass = Get-Content $CredPath | ConvertTo-SecureString -Key (1..16)
[String]$CleartextPass = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($CredPass));
$CredPath 的内容是一个包含 ConvertFrom-SecureString -Key (1..16) 输出的文件。
如何ConvertTo-SecureString -key (1..16)
在 C#/.NET 中完成该部分?
我知道如何创建一个SecureString
,但我不确定应该如何处理加密。
我是使用 AES 加密每个字符,还是解密字符串然后为每个字符创建一个安全字符串?
我对密码学几乎一无所知,但根据我收集到的信息,我可能只想使用 C# 调用 Powershell 命令。
作为参考,我在这里找到了关于 AES 加密/解密的类似帖子: 在 C# 中使用 AES 加密
更新
我已经查看了 Keith 发布的链接,但我面临着更多的未知数。DecryptStringFromBytes_Aes 采用三个参数:
static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
第一个参数是一个字节数组,表示加密文本。这里的问题是,字符串在字节数组中应该如何表示?它应该用编码还是不用编码来表示?
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);
第二个字节数组是键,应该只是一个整数数组:
byte[] key = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
第三个字节数组是一个“初始化向量”——看起来 Aes.Create() 调用会随机为 IV 生成一个 byte[]。环顾四周,我发现我可能需要使用相同的 IV。由于 ConvertFrom-SecureString 和 ConvertTo-SecureString 能够简单地使用密钥进行加密/解密,因此我假设 IV[] 可以是随机的 - 或者 - 具有静态定义。
我还没有找到一个成功的组合,但我会继续努力。