廢話不多說褥赊,上干貨(本文不涉及后端)
AES加密
AES 在密碼學中又稱 Rijndael 加密法糕档,用來替代原先的 DES,已經(jīng)被多方分析且廣泛使用拌喉。
在部分websocket的通訊中為了防止用戶的聊天內(nèi)容被竊取速那,采用了AES加密
使用npm
安裝crypto-js
:
npm install crypto-js --save
創(chuàng)建一個加密服務:
// 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通訊內(nèi)容的加密
* @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通訊內(nèi)容的解密
* @return {String} 解密后的對象字符串,可用JSON轉(zhuǎn)為對象
*/
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簽名主要作用是驗證數(shù)據(jù)的一致性,確保這個數(shù)據(jù)是你真正的用戶發(fā)送的田藐,而非偽造的數(shù)據(jù)
npm install ts-md5 --save
在上面的服務中引入
import { Md5 } from 'ts-md5/dist/md5';
// 使用
sign = Md5.hashStr('需要簽名的數(shù)據(jù)'+md5Key);
使用MD5簽名后得出一段字符串荔烧,可以拼接在數(shù)據(jù)文本后面或者其他方式傳送給后臺用于驗簽
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;
}