UNPKG

kepler-encryption-agreement

Version:

开普勒系列产品的加密插件

102 lines (90 loc) 2.77 kB
/* * @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; } }