如何在Angular 6中进行加密和解密

时间:2018-11-26 10:11:23

标签: javascript angular

登录响应

{      代码:200,      编号:4      msg:“成功”,      用户:“ Sourav”     }

我遇到一个问题,例如我想将ID和用户以加密格式存储在本地存储中。如何使用Angular 6做到这一点?

5 个答案:

答案 0 :(得分:5)

在客户端进行加密是没有意义的,因为密钥要么存储在Javascript代码中,要么通过HTTP发送。在两种情况下都不可能混淆。

答案 1 :(得分:5)

在我们的一个项目中,我们使用了“ crypto-js”库。 http://github.com/brix/crypto-js

import * as CryptoJS from 'crypto-js';

encryptData(data) {

    try {
      return CryptoJS.AES.encrypt(JSON.stringify(data), this.encryptSecretKey).toString();
    } catch (e) {
      console.log(e);
    }
  }

  decryptData(data) {

    try {
      const bytes = CryptoJS.AES.decrypt(data, this.encryptSecretKey);
      if (bytes.toString()) {
        return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
      }
      return data;
    } catch (e) {
      console.log(e);
    }
  }

答案 2 :(得分:4)

尽管并不完美,但是window.btoa()将提供基本的base-64编码,以避免每个人都读取用户数据。这可能是您最快的解决方案。由于客户端的加密是不安全的,因为最终用户可以看到浏览器中的所有内容(您的代码或Ajax调用等),甚至您的加密密钥也是如此。

答案 3 :(得分:1)

您可以使用crypto.js来加密数据。如果您不知道如何在Angular中使用它,请参见this

接下来,您将加密的数据放入本地存储。参见此tutorial

答案 4 :(得分:0)

您也可以使用secure-ls。无需在客户端维护解密密钥。

import * as SecureLS from 'secure-ls';
export class StorageService { 

  private _ls = new SecureLS({ encodingType: 'aes' });
  constructor() {
  }

  set(key: string, value: any, expired: number = 0) {
    this._ls.set(key, value);
  }

  remove(key: string) {
    this._ls.remove(key);
  }

  get(key: string) {
    return this._ls.get(key);
  }

  clear() {
    this._ls.removeAll();
  }
}