angular4AES加密和解密、RSA加密和MD5签名

2019-05-21  本文已影响0人  zyanfly

废话不多说,上干货(本文不涉及后端)

AES加密

AES 在密码学中又称 Rijndael 加密法,用来替代原先的 DES,已经被多方分析且广泛使用。
在部分websocket的通讯中为了防止用户的聊天内容被窃取,采用了AES加密
使用npm安装crypto-js

npm install crypto-js --save

创建一个加密服务:

// crypto.service.ts
import { Injectable } from '@angular/core';
import * as Crypto from "crypto-js";

@Injectable()
export class CryptoService {
  private key: string;
  constructor() {
    this.key = Crypto.enc.Latin1.parse('秘钥');
    this.iv = Crypto.enc.Latin1.parse('秘钥偏移量')
  }

  /**
   * AES加密
   * @param {Object} data 加密对象
   * @description 用于对ws通讯内容的加密
   * @return {String} 加密后的字符串
   */
  encrypt(data){
    let res = Crypto.AES.encrypt(JSON.stringify(data), this.key, {
      iv: this.iv,
      mode: Crypto.mode.CBC,
      padding: Cryto.pad.Pkcs7
    }).toString();
    return res;
  }

  /**
   * AES解密
   * @param {String} data 解密对象
   * @description 用于对ws通讯内容的解密
   * @return {String} 解密后的对象字符串,可用JSON转为对象
   */
  decrypt(data) {
    let res = Crypto.AES.decrypt(data, this.key, {
      iv: this.iv,
      mode: Crypto.mode.CBC,
      padding: Crypto.pad.Pkcs7
    })
    return Crypto.enc.Utf8.stringify(res);
  }
}

在使用到的组件中,可以直接import此服务使用加密和解密功能了。

MD5签名

MD5签名主要作用是验证数据的一致性,确保这个数据是你真正的用户发送的,而非伪造的数据

npm install ts-md5 --save

在上面的服务中引入

import { Md5 } from 'ts-md5/dist/md5';
// 使用
sign = Md5.hashStr('需要签名的数据'+md5Key);

使用MD5签名后得出一段字符串,可以拼接在数据文本后面或者其他方式传送给后台用于验签

RSA加密

npm install jsrsasign --save
import jsrsasign from 'jsrsasign';

/**
   * RSA加密、签名
   * @param data 加密字符串
   * @return {String} string,加密后的base64格式字符串
   */
rsaEncrypt(data){
  let enc, base64Sign;
  let rsa = new jsrsasign.RSAKey();
  rsa = jsrsasign.KEYUTIL.getKey(this.publicKey)
  enc = jsrsasign.KJUR.crypto.Cipher.encrypt(data, rsa);
  base64Sign = jsrsasign.hextob64(enc);
  return base64Sign;
}
上一篇下一篇

猜你喜欢

热点阅读