const { Service } = require('egg'); const sha256 = require("crypto-js/sha256"); const CryptoJS = require("crypto-js"); const KEY = CryptoJS.enc.Utf8.parse('BDQH'); class BaseService extends Service { shaForm = (body, salt) => { return sha256(sha256(body).toString() + salt).toString(); } encryptRequest = (body) => { return CryptoJS.AES.encrypt(body, KEY, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(); } decryptRequest = (body) => { return CryptoJS.AES.decrypt(body, KEY, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8); } // 随机盐生成函数 generateRandomString = () => { const lowerCaseLetters = 'abcdefghijklmnopqrstuvwxyz'; const upperCaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; const numbers = '0123456789'; let result = ''; // 生成5位随机小写字母 for (let i = 0; i < 5; i++) { const randomIndex = Math.floor(Math.random() * lowerCaseLetters.length); result += lowerCaseLetters[randomIndex]; } // 生成5位随机大写字母 for (let i = 0; i < 5; i++) { const randomIndex = Math.floor(Math.random() * upperCaseLetters.length); result += upperCaseLetters[randomIndex]; } // 生成2位随机数字 for (let i = 0; i < 2; i++) { const randomIndex = Math.floor(Math.random() * numbers.length); result += numbers[randomIndex]; } // 打乱整个字符串 const characters = result.split(''); for (let i = characters.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [characters[i], characters[j]] = [characters[j], characters[i]]; } return characters.join(''); } // 教学接口 token 验证,验证 token 是否存在,是否在黑名单中 Verify = async (redis, teachingToken) => { const token = await redis.get('db4').get(teachingToken); if (!token) { return 401; } else if (JSON.parse(token).attacksMark) { return 403; } return JSON.parse(token).uid; } shunt = (uid) => { return uid[uid.length - 1]; } isAllDigits = (str) => { const regex = /^\d+$/; return regex.test(str); } } module.exports = BaseService;