ASP.NET Core应用使用CryptoJS加密时报错:找不到变量CryptoJS
问题排查及解决方案
错误根因
- 文件名不匹配:你放入wwwroot/js目录的是
ads.js,但在_Layout.cshtml里引用的是aes.js,浏览器找不到对应js文件,自然无法加载CryptoJS对象 - 依赖缺失:就算文件名写对,单独引用
aes.js也不够,CryptoJS的AES模块依赖核心库core.js和编码工具库enc-utf8.js,缺了这些依赖CryptoJS也不会被正确初始化 - 脚本加载顺序错误:如果你的
Index.cshtml里的CheckData函数所在的script标签,位置在_Layout的aes.js引用之前,会导致代码执行时CryptoJS还没加载完成 - 无用文件干扰:你添加的
AESEncryption.cs是后端C#的加密类,和前端JS的CryptoJS运行没有任何关系,不会帮你注入CryptoJS全局对象
解决步骤
- 修正文件名:确认你下载的CryptoJS相关文件名称,把引用路径里的文件名和实际存放的文件名统一,如果你存的是
ads.js就把引用改成<script src="~/js/ads.js" type="text/javascript"></script>,如果确实是aes.js就把实际存放的文件名改成aes.js - 完整引入CryptoJS依赖:优先直接引入完整的CryptoJS包,从官方下载完整的
crypto-js.min.js放到wwwroot/js目录,直接引用这个完整包就不用单独引入各个模块:
<script src="~/js/crypto-js.min.js" type="text/javascript"></script>
如果要拆分引用,要按照顺序引入所有依赖:
<script src="~/js/core.js"></script> <script src="~/js/enc-utf8.js"></script> <script src="~/js/aes.js"></script> <script src="~/js/mode-cbc.js"></script> <script src="~/js/pad-pkcs7.js"></script>
- 调整脚本加载顺序:确保
_Layout.cshtml里的CryptoJS相关引用,位置在Index.cshtml的自定义脚本之前,你也可以把自定义的CheckData函数用DOM加载完成事件包裹,避免加载顺序问题:
document.addEventListener('DOMContentLoaded', function() { window.CheckData = function() { var txtUserName = $('#Username').val(); var txtpassword = $('#Password').val(); if (txtUserName == "") { alert('Please enter UserName'); return false; } else if (txtpassword == "") { alert('Please enter Password'); return false; } else { var key = CryptoJS.enc.Utf8.parse('8080808080808080'); var iv = CryptoJS.enc.Utf8.parse('8080808080808080'); var encryptedlogin = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(txtUserName), key, { keySize: 128 / 8, iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); $('#Username').val(encryptedlogin); var encryptedpassword = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(txtpassword), key, { keySize: 128 / 8, iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); $('#Password').val(encryptedpassword); } } })
- 验证加载情况:打开浏览器控制台,切换到网络(Network)标签,刷新页面看你引用的js文件是不是返回200状态,没有404错误,然后在控制台输入
CryptoJS回车,能正常输出对象就说明加载成功。
内容的提问来源于stack exchange,提问作者Abdulsalam Elsharif
相关产品推荐
相关产品推荐

