ES5浏览器环境下无法初始化CryptoJS的使用问题咨询
浏览器端传统JS使用CryptoJS指南
报错原因
你遇到的 Uncaught TypeError: CryptoJS is not a constructor 报错,核心原因是:CryptoJS 对外暴露的是内置了各类加密算法的命名空间对象,本身不是构造函数,无需使用new关键字实例化。
传统用法引入方式
不需要使用任何ES6类、模块化导入语法,用原生HTML引入即可:
- 从你下载的npm包中提取
crypto-js.min.js文件存入项目目录,也可直接使用公开CDN资源 - 在HTML页面中添加script标签引入:
<script src="./你的本地存储路径/crypto-js.min.js"></script>
引入完成后全局会自动挂载CryptoJS对象,无需额外初始化操作,直接调用其下的方法即可。
AES加解密示例代码
以下是可和C#端互通的常规AES加解密实现,你可以直接复用:
// 密钥、偏移量、加密模式、填充方式必须和C#端配置完全一致 // 16位密钥对应AES-128,24位对应AES-192,32位对应AES-256 var aesKey = CryptoJS.enc.Utf8.parse("替换为你和C#端约定的16/24/32位密钥"); var aesIv = CryptoJS.enc.Utf8.parse("替换为你和C#端约定的16位偏移量"); // 加密方法 function aesEncrypt(plainText) { let srcData = CryptoJS.enc.Utf8.parse(plainText); let encryptedResult = CryptoJS.AES.encrypt(srcData, aesKey, { iv: aesIv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encryptedResult.toString(); } // 解密方法 function aesDecrypt(cipherText) { let decryptedResult = CryptoJS.AES.decrypt(cipherText, aesKey, { iv: aesIv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Utf8.stringify(decryptedResult).toString(); }
如果不需要定制配置,也可以用简化写法:
// 简化加密 let encryptedStr = CryptoJS.AES.encrypt("待加密内容", "你的密钥").toString(); // 简化解密 let plainStr = CryptoJS.AES.decrypt(encryptedStr, "你的密钥").toString(CryptoJS.enc.Utf8);
内容的提问来源于stack exchange,提问作者Marugo
相关产品推荐
相关产品推荐

