在我的Angular 2应用程序(SystemJS模块管理器,作为脚本语言的Typescript)中,我需要导入一个npm模块来处理加密(Crypto-JS; Forge-JS或任何其他服务目的)
在CryptoJS的情况下,通过npm install*安装后我尝试添加:
<script src="node_modules/crypto-js/crypto-js.js"></script>
Run Code Online (Sandbox Code Playgroud)
in index:html.
在我的服务(app/services/my-service.service.ts)我通过它导入它
import {CryptoJS} from 'node_modules/crypto-js/crypto-js.js' // or /aes.js --> same issue
Run Code Online (Sandbox Code Playgroud)
但是,导入无法正常工作
console.log(CryptoJS);
Run Code Online (Sandbox Code Playgroud)
打印未定义.
我还尝试添加模块路径
System.config({
// ...
map: {
CryptoJS
}
}
Run Code Online (Sandbox Code Playgroud)
并通过我的服务导入它
import {CryptoJS} from 'cryptoJs';
Run Code Online (Sandbox Code Playgroud)
虽然我不确定我应该在SystemJS配置中实际放入什么,但我尝试过的解决方案都没有.
编辑我也试过......
// import ... as to overcome no default export
import * as CryptoJS from 'node_modules/crypto-js/crypto-js.js';
Run Code Online (Sandbox Code Playgroud)
但是之后
console.log(CryptoJS.);
Run Code Online (Sandbox Code Playgroud)
不提供AES /任何方法(我的编辑通常建议我可以通过自动完成使用哪些方法)
编辑2现在感谢Thierry和PierreDuc的贡献很明显,打字和模块导入是无关联的概念.
然而,他们都没有工作.这就是我所做的:
我下载了CryptoJS打字文件,把它放在typings/cryptojs/cryptojs.d.ts中
然后我补充说
/// …Run Code Online (Sandbox Code Playgroud) 我尝试使用AES中的 AES 库进行角度加密。
我使用 AES 的方法加密了字符串CryptoJS.AES.encrypt()。
这是我的代码:
var txtloginKod = 'Some String...';
var key = CryptoJS.enc.Utf8.parse('8080808080808080');
var iv = CryptoJS.enc.Utf8.parse('8080808080808080');
var encryptedlogin = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(txtloginKod), key,
{
keySize: 128 / 8,
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
Run Code Online (Sandbox Code Playgroud)
该方法CryptoJS.AES.encrypt()将一个对象返回到我的encryptedlogin变量。
我不知道如何在 C# 中将此对象发送到我的 WCF Web 服务器
当我尝试发送整个对象(并定义 Web 服务方法以获取 C# 对象)时,出现以下错误:
“将循环结构转换为 JSON”