在Angular 5中生成MD5哈希值。

11
在angular中,我想生成一个MD5哈希值,所以我尝试安装npm模块。我尝试了'crypto-js'、'angular-md5'等许多模块,但都没有结果。
最后,我尝试使用'ts-md5',但它给我抛出一个错误,就像其他所有的模块一样。
首先运行命令:npm install --save ts-md5 然后:
import {Md5} from 'ts-md5/dist/md5';
@Injectable()
export class HeroService {
    constructor(
        private MD5: Md5
    ) { }
}

但是我收到了错误:

[Error] ERROR – Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[HeroService -> Md5]: 
  StaticInjectorError(Platform: core)[HeroService -> Md5]: 
    NullInjectorError: No provider for Md5!
get
resolveToken
tryResolveToken
[...]

有更好的模块来进行MD5加密吗?我如何解决这个错误?


1
你在 app.module.ts 中的 providers 数组中添加了 Md5 吗?看起来这就是你缺少的。 - R. Richards
MD5不是加密,也不应该在新的工作中经常使用密码哈希函数,因为它不太安全。SHA256是MD5的一个合理替代品。 - zaph
3
我知道MD5不是加密,建议使用更好的加密系统。但我需要用MD5来验证漫威开发者API的身份,而且在这种情况下,必须使用MD5而不是其他系统。 - Alex
2个回答

29

最好的方法是直接在需要使用它的组件中导入并使用new Md5()调用它。

import {Md5} from 'ts-md5/dist/md5';

const md5 = new Md5();
console.log(md5.appendStr('hello').end());

感谢大家的快速回复。


如果您像使用常规的new Md5()构造函数一样使用它(您可能应该这样做,因为它无法从DI中受益并且不应该是单例),则不需要在模块中拥有Md5。 - Estus Flask
我刚刚尝试了一下,你说得完全正确。所以我将编辑我的回复。 - Alex
我尝试了许多加密/摘要库,这是第一个可以在没有额外工作的情况下正常工作的。谢谢! - HankCa

6

你不能像这样注入 MD5 类,因为 Angular 依赖注入框架不知道如何提供它。你只能请求已在 @NgModule 提供程序中提供的类,或者由其他导入的 @NgModules 添加到提供程序中的类。

你应该从构造函数中删除 private MD5: Md 并查看是否有效。还可以查看 angular cli global scripts


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接