我们的Classic ASP应用程序的遗留部分使用了一些代码,这些代码应该用Rijndael(AES)加密/解密字符串。此代码在the Internet here(Rijndael AES Block Cipher(VB Version))上找到。我已经在SO上找到了一个引用这个确切库和ask almost the same thing as me的问题,但我怀疑至少有一件事情出错了(除了在bytes数组的开头加上数据的长度加密)。 vbScript实现似乎根本不向要加密的数据添加IV。因此,我无法将相同的加密与RijndaelManaged匹配,因为它:
有人知道在没有指定IV(空)的情况下AES是否可以在.Net中加密?
答案 0 :(得分:7)
您使用的代码和问题的解决方案都是完全不安全的。 首先, *您不应该在任何情况下使用CRYPTO图书馆一些随机的GUY WROTE * 期间,故事结束。 Windows和.net都有受信任,经过审查的加密库。他们没有定时攻击问题,正确的后门,或只是没有人知道加密的任何人会尝试的蠢事。
例如,您提到的库似乎只支持ECB mode。这是完全不安全的,没有人知道他们在做什么会做到这一点。尽管有很多原因,但为什么不这样做最好的证明是:
这是linux penguine的ecb加密图片。它不是很安全吗?
答案 1 :(得分:2)
如果没有IV,你不能在CBC模式下加密任何东西。但是,你可以明确地将IV设置为零。由于IV与第一个普通块进行XOR运算,因此将IV设置为全零等效于没有IV。
这只是你问题的答案,你可能想要留意到目前为止给你的所有其他安全建议。您可能还想检查代码是否实际使用需要IV的CBC模式加密。
用于CBC模式加密的IV始终只有一个块(AES为16字节,但只要可用,就使用getBlockSize()
方法。
答案 2 :(得分:1)