You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell AES加密IV存储及C#解密时IV获取方法咨询

AES解密缺失IV的问题解决办法

关键结论

你之前用PowerShell加密时生成的随机IV没保存?那根本没法算出这个IV。AES的IV设计就是纯随机的,不需要保密但必须和密文配对——没存的话,解密这条路走不通,除非你能找回当时加密时生成的IV(比如加密过程有日志记录)。

两种场景的解决方案

场景1:还能重新加密文件

直接修改PowerShell脚本,把IV和密文一起输出保存,这样后续C#解密就能拿到正确的IV。修改后的脚本如下:

$secretKey = "thisIsAnExampleButNotTheRealKey2"
$cleBytes = [System.Text.Encoding]::UTF8.GetBytes($secretKey)
$aes = New-Object System.Security.Cryptography.AesCryptoServiceProvider
$aes.Key = $cleBytes
$aes.GenerateIV()

# 把IV转成Base64方便存储
$ivBase64 = [Convert]::ToBase64String($aes.IV)

$texteBytes = [System.Text.Encoding]::UTF8.GetBytes($texteAChiffrer)
$chiffreBytes = $aes.CreateEncryptor().TransformFinalBlock($texteBytes, 0, $texteBytes.Length)
$cryptedText = [Convert]::ToBase64String($chiffreBytes)

# 可以单独输出IV,或者直接把IV和密文拼在一起(比如用|分隔,或者利用IV固定长度前缀)
Write-Output "加密文本: $cryptedText"
Write-Output "对应IV: $ivBase64"

# 另一种方式:因为AES的IV是16字节,转Base64后固定24个字符,直接拼在密文前面
$combinedText = $ivBase64 + $cryptedText
Write-Output "合并文本: $combinedText"

对应的C#解密代码可以这样写(拿合并文本的例子):

public static string UncryptAES(string combinedText, byte[] key)
{
    // 截取前24个字符作为IV的Base64字符串
    string ivBase64 = combinedText.Substring(0, 24);
    string cryptedText = combinedText.Substring(24);
    byte[] initVector = Convert.FromBase64String(ivBase64);

    using (Aes aesAlgo = Aes.Create())
    {
        aesAlgo.Key = key;
        aesAlgo.IV = initVector;
        var 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();
        }
    }
}

场景2:已经加密的文件没法重新加密

那很遗憾,没有任何办法解密。AES加密时,不同的IV会生成完全不同的密文,没有正确的IV,解密出来的内容全是乱码,不可能恢复出原始数据。

额外提醒(AES最佳实践)

  • IV必须随机生成,绝对不能用固定值,否则会大大降低加密安全性
  • IV不需要保密,但一定要和密文一起保存/传输
  • 你的示例密钥刚好32字节(256位),符合AES-256的要求,这点是对的

内容的提问来源于stack exchange,提问作者Fred Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:21:26