我有几个使用PowerShell脚本通过AES-256加密的文件,加密方式如下:
$secretKey = "thisIsAnExampleButNotTheRealKey2"
$cleBytes = [System.Text.Encoding]::UTF8.GetBytes($secretKey)
$aes = New-Object System.Security.Cryptography.AesCryptoServiceProvider
$aes.Key = $cleBytes
$aes.GenerateIV() # 这里生成了初始化向量(IV)
$texteBytes = [System.Text.Encoding]::UTF8.GetBytes($texteAChiffrer)
$chiffreBytes = $aes.CreateEncryptor().TransformFinalBlock($texteBytes, 0, $texteBytes.Length)
$cryptedText = [Convert]::ToBase64String($chiffreBytes)
Write-Output "encrypted Text: $cryptedText"
在我的C#应用程序中,我需要解密这些文件。我使用了以下方法:
public static string UncryptAES(string cryptedText, byte[] key, byte[] initVector)
{
using (Aes aesAlgo = Aes.Create())
{
aesAlgo.Key = key;
// 我如何计算初始化向量,而不是作为参数传递?
aesAlgo.IV = initVector;
ICryptoTransform decryptor = aesAlgo.CreateDecryptor(aesAlgo.Key, aesAlgo.IV);
using (var msDecrypt = new MemoryStream(Convert.FromBase64String(cryptedText)))
{
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (var srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
}
我了解到,在PowerShell执行加密时会自动生成一个随机的初始化向量(IV),并且该IV是与加密数据一起存储的。我应该如何计算这个初始化向量呢?