【问题标题】:Aes Encryption in C# Decrypt using other IV [closed]C#中的Aes加密使用其他IV解密[关闭]
【发布时间】:2022-01-27 18:21:27
【问题描述】:

他们说您可以使用相同的密钥但另一个初始化向量来解密数据, 如何实现这一目标? 例子: 我的加密IV如下 byte[] bytes = {12,12,5,12,32,62,91,16,89,92,17,72,45,52,13,42}; 但对于我来说,解密是长度为 16 字节的随机 IV。

【问题讨论】:

  • 他们是谁,在哪里说的?
  • 对于 CBC,不正确的 IV 只会破坏第一个块,因为下一个块实际上只需要前一个加密块。使用相对较小的块大小和相对容忍早期字节损坏的文件格式,看起来不正确的 IV 仍然“有效”
  • 所以不能用differet IV解密?我刚在网上看到的。
  • 它似乎适用于宽容的格式,例如 JPEG。结果仍然是清晰的图像,但第一个块实际上丢失了。
  • 我怀疑他们要么误解了你,要么把它错误地传达给了你。您对每条消息使用不同的 IV,是的,因此发送两次的相同未加密消息看起来不会被加密。 IV 可以作为消息的一部分作为纯文本传递 - 攻击者可以看到它并不重要 - 它只是用于随机化使用密钥加密的消息。但是对于特定消息,IV 确实需要在两边都相同。

标签: c# .net encryption aes


【解决方案1】:

您需要使用与加密相同的 IV 调用 SymmetricAlgorithm.CreateDecryptor()

引用docs:

Aes 实例中的 SymmetricAlgorithm.CreateDecryptor 方法被传递 IV 值和用于加密的相同密钥。

代码示例,同样来自文档页面:

Aes aes = Aes.Create();
CryptoStream cryptStream = new CryptoStream(
    fileStream,
    aes.CreateDecryptor(key, iv),
    CryptoStreamMode.Read
);

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2012-02-21
    • 2022-01-22
    • 2018-10-08
    • 1970-01-01
    相关资源
    最近更新 更多