JavaScript中的CryptoJS AES加密密钥大小?

JavaScript中的CryptoJS AES加密密钥大小?,javascript,c#,encryption,aes,cryptojs,Javascript,C#,Encryption,Aes,Cryptojs,大家好。 我在javascript中使用CryptoJS开发AES加密时遇到问题。 让我们先看看我的源代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="jquery-3.5.1.min.js"></script> <script sr

大家好。 我在javascript中使用CryptoJS开发AES加密时遇到问题。 让我们先看看我的源代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="jquery-3.5.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/enc-base64.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/md5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/evpkdf.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/cipher-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/aes.min.js"></script>
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/pad-nopadding.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/lib-typedarrays.min.js"></script>-->
<script type="text/javascript">
    $(document).ready(function() {
        var encrypted = "TEST";
        var key = CryptoJS.enc.Hex.parse("bf161fba8b12433f176bc9088e14bd49499ee34fcb4694082345639957e778852bdc904206c4ecd2d3e2f4bc");
        var iv  = CryptoJS.enc.Hex.parse("18a69482e9d401052c4307dcb8124409");
        var decrypted = CryptoJS.AES.encrypt(encrypted, key, { iv: iv });
        var dec         = CryptoJS.AES.decrypt(decrypted, key, { iv: iv });

        var _cipher     = decrypted.toString();
        var _plain      = dec.toString();
    });
</script>

$(文档).ready(函数(){
var=“TEST”;
var key=CryptoJS.enc.Hex.parse(“bf161fba8b12433f176bc9088e14bd49499ee34fcb4694082345639957e778852bdc904206c4ecd2d3e2f4bc”);
var iv=CryptoJS.enc.Hex.parse(“18A69482E9D41052C4307DCB8124409”);
var decrypted=CryptoJS.AES.encrypt(加密,密钥,{iv:iv});
var dec=CryptoJS.AES.decrypt(已解密,密钥,{iv:iv});
var_cipher=decrypted.toString();
var _plain=dec.toString();
});
在这里,你可以看到我的密钥大小是44字节,也就是352位。 但是CryptoJS使用16字节的长度进行完美的加密和解密。 我完全不明白这是怎么发生的。 据我所知,AES标准使用128、192和256位密钥大小。

我的问题是,我必须在C#上写一些代码,用相同的密钥和iv加密相同的数据。 但C#不允许对AES使用44字节的密钥长度。 我正在使用RijndaelManaged

有没有人能解释在CryptoJS中这是如何发生的?这样我就可以写自己的C代码了。
提前谢谢。

…您可以看到我的密钥大小是44字节。。。为什么AES有一个44字节的密钥?CryptoJS没有检查密钥大小,导致AES没有定义轮数(例如,44字节有17轮;AES根据密钥大小定义10、12和14轮),请参见和,第92行ff。因为密钥的处理(不等16、24、32字节)如果最终是CryptoJS漏洞导致加密超出AES标准,您将无法用C#或任何其他语言复制此漏洞,也就是说,只有CryptoJS才能解密。@Topaco:那真是太可怕了。@PresidentJamesK.Polk-是的,令人惊讶的是,他们在测试中没有注意到这一点,或者认为没有必要修复它。特别是因为CryptoJS从2012年5月(v3.0)开始就在其当前设计中出现,并且该版本已经包含此错误…您可以看到我的密钥大小是44字节。。。为什么AES有一个44字节的密钥?CryptoJS没有检查密钥大小,导致AES没有定义轮数(例如,44字节有17轮;AES根据密钥大小定义10、12和14轮),请参见和,第92行ff。因为密钥的处理(不等16、24、32字节)如果最终是CryptoJS漏洞导致加密超出AES标准,您将无法用C#或任何其他语言复制此漏洞,也就是说,只有CryptoJS才能解密。@Topaco:那真是太可怕了。@PresidentJamesK.Polk-是的,令人惊讶的是,他们在测试中没有注意到这一点,或者认为没有必要修复它。特别是因为CryptoJS从2012年5月(v3.0)开始就在其当前设计中出现,并且该版本已经包含此缺陷。