kepler-encryption-agreement
Version:
开普勒系列产品的加密插件
102 lines (90 loc) • 2.77 kB
text/typescript
/*
* @Author: zhangyida
* @Date: 2022-05-18 15:56:25
* @LastEditors: zhangyida
* @LastEditTime: 2022-05-18 16:13:59
* @FilePath: /workspace/kepler-encryption-agreement/src/Util.ts
* @Description: 工具类
*/
declare const require:any;
import Base64 from 'crypto-js/enc-base64';
import Utf8 from 'crypto-js/enc-utf8';
import MD5 from 'crypto-js/md5';
const crypto = require('crypto');
const { JSEncrypt } = require('jsencrypt');
export class Util {
// 加密
public static encryption = (data:any,key:any) => {
let iv = "";
let clearEncoding:any = 'utf8';
let cipherEncoding:any = 'base64';
let cipherChunks = [];
let cipher = crypto.createCipheriv('aes-128-ecb', key, iv);
cipher.setAutoPadding(true);
cipherChunks.push(cipher.update(data, clearEncoding, cipherEncoding) as never);
cipherChunks.push(cipher.final(cipherEncoding) as never);
return cipherChunks.join('');
}
// 解密
public static decryption = (data:any, key:any) => {
let iv = "";
let clearEncoding:any = 'utf8';
let cipherEncoding:any = 'base64';
let cipherChunks = [];
let decipher = crypto.createDecipheriv('aes-128-ecb', key, iv);
decipher.setAutoPadding(true);
cipherChunks.push(decipher.update(data, cipherEncoding, clearEncoding) as never);
cipherChunks.push(decipher.final(clearEncoding) as never);
return cipherChunks.join('');
}
/**
* 转成base64的方法
* @param {string} data 需要转成base64的值
*/
static Base64Encode = (data:any) => {
return Base64.stringify(Utf8.parse(data));
}
/**
* 转成MD5加密
* @param {string} data 需要转成MD5的值
*/
static MD5Encode = (data:any,key?:any) => {
return MD5(data,key);
}
/**
* RSA加密
* @param {string} data 需要转成RSA加密的值
*/
static RSAEncode = (data:any, publicKey:string) => {
let encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
return encrypt.encrypt(data);
}
/**
* 生成一个16位的随机数
*/
static createRandom16 = () => {
const n:any = '000000000000000';
const m:any = (10000000000000000 * Math.random()).toString();
const r:any = (`${n}${m}`).match(/(\d{16})(\.|$)/);
let random:any = r[1];
return random;
}
/**
* 获取X-Auth-Token 加密协议
*
*/
public static getAuthToken = (random:any, channel:string, publicKey:string, key:string) => {
let timestamp = Date.parse(new Date() as any)/1000;
let payload = {
channel,
key: Util.RSAEncode(random, publicKey),
timestamp
}
const newPayload = `${JSON.stringify(payload)}${key}`;
const payloadToToken = `${JSON.stringify(payload)}`;
let sign = Util.MD5Encode(newPayload);
let AuthToken = `${Util.Base64Encode(payloadToToken)}.${sign}`;
return AuthToken;
}
}