JavaScript中的CryptoJS AES加密密钥大小?
大家好。 我在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
<!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)开始就在其当前设计中出现,并且该版本已经包含此缺陷。