【问题标题】:How to implement SHA-256 encryption in Angular2如何在 Angular2 中实现 SHA-256 加密
【发布时间】:2021-08-03 21:04:45
【问题描述】:

在发出 API 请求之前,我需要在 SHA256 中加密我的密码。我无法在 Angular2 中找到 SHA-256 的任何实现

【问题讨论】:

  • SHA-256 不是加密,而是消息摘要(哈希)。

标签: javascript angular sha256


【解决方案1】:

我为此使用了sha.js,它非常简单并且成功!

第一个npm install --save sha.js

在您的组件、服务等中导入...:

import * as shajs from 'sha.js';

然后按照文档的建议使用它:

shajs('sha256').update({stringToBeHashed}).digest('hex')

【讨论】:

  • 我使用这种方法并且效果很好,但是您必须在“update”方法中省略{}。示例:shajs('sha256').update(stringToBeHashed).digest('hex');
  • 这不是一个纯 JavaScript 库,它只能在 nodejs 环境中运行。如果您不想浪费时间编辑代码,请不要理会这个答案。
  • 在 angular6 项目中尝试此答案时,我收到运行时错误 'Uncaught ReferenceError: global is not defined' 查看堆栈,我认为 webpack 无法导入它。
  • @apricity 我在 StackBlitz 中有一个 working example(使用 webpack)添加 @types/node 模块并使用 require 导入 sha.js 模块。希望对您有所帮助!
  • 如果你有导入​​问题我建议阅读this article关于将 JavaScript 库导入 TypeScript 项目
【解决方案2】:

在我回答你的问题之前,你应该明白SHA256 should not be used for passwords。您还应该知道,客户端密码散列通常不会进行,但许多研究人员都在推动它。问题是很容易做错事。指导herehere

现在回答您的问题,而不是使用 Angular2,为什么不直接使用 Stanford JavaScript Crypto LibraryCrypto-Js?这些链接中记录了 SHA256 上的 API。

【讨论】:

  • 你提供了很好的链接
【解决方案3】:

SHA-256 和 md5 都提供散列而不是加密。 SHA-256 现在还没有提供任何 angular2 支持。如果你想 hashstring/hashAsciiStr 它在 ts-md5 中非常简单......

ts-md5 npm link

ts-md5使用步骤:

  1. npm 安装

    npm install ts-md5

  2. 在你想要使用的组件中导入类

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

  3. 散列一些东西

    Md5.hashStr('blah blah blah') => hex:string Md5.hashStr('blah blah blah', true) => raw:Int32Array(4) Md5.hashAsciiStr('blah blah blah') => hex:string Md5.hashAsciiStr('blah blah blah', true) => raw:Int32Array(4)

希望对你有所帮助

【讨论】:

  • 2017年了,MD5真的不应该再用了,因为前段时间坏了(en.wikipedia.org/wiki/MD5#Security)。
  • 实际上 MD5 和 SHA256 都不适合密码哈希。这是#4 in my Top 10 Developer Crypto Mistakes
  • 我同意 MD5 不应该用于存储密码。它的散列算法并被泄露。我建议使用 PBKDF2 [link] (en.wikipedia.org/wiki/PBKDF2) 来存储密码
  • 这真的取决于你用它做什么。我会用它来做密码吗?不,绝对不是。如果你深入挖掘,我会用它来做简单的哈希,比如记录 API,你会弄清楚发生了什么以及如何发送你自己的请求?是的。您很有可能会遇到这种情况,因为在任何工作场所都不太可能发生在开发日志的安全解决方案上花费无数小时的事情:)
【解决方案4】:

你应该直接从 sha.js 导入 shajs

import shajs from 'sha.js';

然后重复使用它:

export class AppComponent  {
  hash = shajs('sha256').update('Abc123$').digest('hex');
}

【讨论】:

  • 这与当前接受的答案有什么不同吗?
  • @DaneBrouwer the import itslef ->这不起作用:import * as shajs from 'sha.js';
  • 似乎应该将其作为评论而不是新答案添加到原始答案中,但这显然取决于您。 :-)
  • 我不是第一个回答的人
猜你喜欢
  • 2015-06-01
  • 1970-01-01
  • 2012-03-08
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多