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;
}