【发布时间】:2011-09-05 13:17:11
【问题描述】:
我正在使用 Rijndael 算法对密文进行解密。不幸的是,我无法访问数据的加密,并且只提供了一个密码(用于生成密钥)和算法类型。
我没有盐(这似乎没问题),我也没有静脉注射。现在,我的问题是我是否绝对必须拥有 IV 才能执行解密?我怀疑编写加密的开发人员没有使用盐或 IV(如果这可能的话)。
我尝试将 IV 设置为 null,但没有成功,生成 Rijndael 实例会创建一个默认 IV,这会在解密后扭曲我明文的前 16 个字符。
有什么方法可以抵消IV的影响吗?或者是否需要尝试获取加密中使用的 IV?
【问题讨论】:
-
也许你的密码的前 16 个字符 是 IV?
-
@GregS 在这种情况下我不这么认为。前 16 个字符只是垃圾,它们替换了我明文的前 16 个字符。从 char 17 开始的字符在正确的位置被正确解密。
-
另一种可能性是 IV 始终为零。当不确定加密安全注意事项的人实施它时,有时会发生这种情况。此外,一些实现默认使用全零的 IV。在这种情况下,我会尝试 16 个零的 IV(二进制,而不是 ASCII)。
-
是的,这正是发生的事情。与他们联系后,他们告诉我 IV 是用零生成的。感谢您的输入!对于任何感兴趣的人,这是用零填充 IV 的代码:
myRijndael.IV = new byte[myRijndael.IV.Length];
标签: c# encryption rijndael