Javascript 使用错误密钥进行AES解密。如何隐藏钥匙错误的事实?

Javascript 使用错误密钥进行AES解密。如何隐藏钥匙错误的事实?,javascript,encryption,aes,cryptojs,Javascript,Encryption,Aes,Cryptojs,我正在使用。当我用错误的密钥使用AES.decrypt时,我注意到它通常有一个负的“sigBytes”,这告诉我我用了错误的密钥。为什么这是可能的?它是否与无效填充有关?我试过不同的AES模式,同样的问题。AES是否有可能不确认故障 是否有一种标准的加密算法可以在没有成功或失败迹象的情况下解密为随机字节?是的,基于流的密码通常不会报告失败。基本上,如果您知道密文大小与明文大小相同,则无法报告失败。这是因为通用密码通常接受任何消息,这意味着在特定的位长度内,每个明文只有一个密文,反之亦然,这与使用

我正在使用。当我用错误的密钥使用AES.decrypt时,我注意到它通常有一个负的“sigBytes”,这告诉我我用了错误的密钥。为什么这是可能的?它是否与无效填充有关?我试过不同的AES模式,同样的问题。AES是否有可能不确认故障


是否有一种标准的加密算法可以在没有成功或失败迹象的情况下解密为随机字节?

是的,基于流的密码通常不会报告失败。基本上,如果您知道密文大小与明文大小相同,则无法报告失败。这是因为通用密码通常接受任何消息,这意味着在特定的位长度内,每个明文只有一个密文,反之亦然,这与使用的密钥无关。这种1:1映射称为伪随机置换或PRP。由于每个密文都返回一条有效的明文消息,因此不会返回任何错误

因此,所有流密码(如ChaCha)和分组密码流模式都将具有此属性。流模式是不需要填充的模式,因此与明文大小相比,不应扩展密文大小。当然,如果您主动指出需要填充,则可能会破坏此特定属性。目前最常见的计数器模式可能是CTR模式,这也是因为它用于几乎所有经过身份验证的模式。CFB/OFB通常仅用于遗留用途


请注意,对手仍可能根据明文中的信息获取信息。通常,即使只知道很少的明文,也可以找到密钥(例如,JPEG头很容易就足够了)。对错误的明文执行的其他操作也可能很容易表明失败(将接收端变成所谓的明文oracle)。

您使用的是哪种操作模式?MCVE?CBC。用同样的问题尝试了这些可用的选项:CFB、CTR、OFB、Ecb可能是的,虽然CFB、CTR和OFB不应该有它。也许CryptoJS只是在这些模式下进行填充。我正在寻找一个选项,但我能问一下你为什么想要这个吗?这并不会让破解变得更困难,除非你加密的东西看起来也是完全随机的。(毕竟,如果你试图破解某个东西,只需试着解密一个块就可以了。)最好使用基于密码的KDF(如bcrypt、scrypt、Argon、PBKDF2)使从密码中获取AES密钥的速度变慢,以减缓攻击并使用强密码。CFB、CTR和OFB模式下的AES应该可以在没有填充的情况下正常工作。你能出示相关的加密/解密代码吗?