123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- import router from "@/router";
- import { store } from "@/store/store";
- import CryptoJS from "crypto-js";
- import { MD5 } from "./md5";
- export function setUUID() {
- if (!localStorage.getItem("uuidForEcs")) {
- const uuidForEcs = "" + Date.now() + Math.random();
- localStorage.setItem("uuidForEcs", uuidForEcs);
- }
- }
- // 如果这台机器上登录过的学生人数小于5,那么这台电脑就是学生的
- export function isThisMachineOwnByStudent() {
- return JSON.parse(localStorage.getItem("userIds") || "[]").length < 5;
- }
- /** 通用的退出登录函数
- * @param cause - 退出登录的原因
- */
- export function showLogout(cause: string) {
- logger({
- pgu: "AUTO",
- cnl: ["console", "local", "server"],
- dtl: "用户被要求重新登录",
- ext: { cause },
- });
- $message.warning(cause, { duration: 5 * 60 * 1000, closable: true });
- void router.push({ name: "UserLogin" });
- }
- /**
- * 将阿拉伯数字转换成汉字数字
- * @param num 数值
- * @returns 汉字数字
- */
- export function toChineseNumber(num: number) {
- let ret = "";
- if (num < 10) {
- ret = num.toLocaleString("zh-u-nu-hanidec");
- } else if (num === 10) {
- ret = "十";
- } else if (num > 10 && num < 20) {
- ret = "十" + (num % 10).toLocaleString("zh-u-nu-hanidec");
- } else if (num >= 20 && num < 100) {
- const s = num
- .toLocaleString("zh-u-nu-hanidec", { useGrouping: false })
- .split("");
- s.splice(1, 0, "十");
- ret = s.join("").replace("〇", "");
- } else {
- ret = num.toLocaleString("zh-u-nu-hanidec"); // 假设没有超过100的大题
- }
- return ret;
- }
- let salt: string;
- export function setSalt(_salt: string) {
- salt = _salt;
- }
- export function getSalt() {
- return salt;
- }
- export function getKey(timestamp: number) {
- const { key, token } = store.user;
- if (!key || !token) return "";
- return MD5(`key=${key}&token=${token}×tamp=${timestamp}`);
- }
- function toHex(str: string) {
- if (!str) {
- return "";
- }
- const chars = [];
- for (let n = 0; n < str.length; n++) {
- chars.push(str.charCodeAt(n).toString(16));
- }
- return chars.join("");
- }
- const ivStr = "@M#A$G%A^2&0*2(1"; // 偏移量
- const iv = toHex(ivStr); // 16进制偏移量
- export function decryptLogin(encStr: string, key: string): string {
- return CryptoJS.enc.Utf8.stringify(
- CryptoJS.AES.decrypt(
- CryptoJS.format.Hex.parse(encStr),
- CryptoJS.enc.Hex.parse(toHex(key)),
- {
- iv: CryptoJS.enc.Hex.parse(iv),
- mode: CryptoJS.mode.CBC,
- padding: CryptoJS.pad.Pkcs7,
- }
- )
- );
- }
- /** AES(带向量) 简写 A */
- export function encryptA(str: string, key: string) {
- return CryptoJS.AES.encrypt(str, CryptoJS.enc.Hex.parse(toHex(key)), {
- // iv: CryptoJS.enc.Hex.parse(iv),
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
- }).ciphertext.toString();
- }
- export function decryptA(encStr: string, key: string): string {
- return CryptoJS.enc.Utf8.stringify(
- CryptoJS.AES.decrypt(
- CryptoJS.format.Hex.parse(encStr),
- CryptoJS.enc.Hex.parse(toHex(key)),
- {
- // iv: CryptoJS.enc.Hex.parse(iv),
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
- }
- )
- );
- }
- /** base64加密 简写B */
- export function encryptB(str: string): string {
- // return window.btoa(str);
- return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(str));
- }
- /** base64加密 简写B */
- export function decryptB(str: string): string {
- return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(str));
- }
- /** RC4(无向量) 简写 C */
- export function encryptC(str: string, key: string) {
- return CryptoJS.RC4.encrypt(
- str,
- CryptoJS.enc.Hex.parse(toHex(key))
- ).toString();
- }
- export function decryptC(encStr: string, key: string): string {
- return CryptoJS.enc.Utf8.stringify(
- CryptoJS.RC4.decrypt(encStr, CryptoJS.enc.Hex.parse(toHex(key)))
- );
- }
- /** DES(无向量) 简写 D */
- export function encryptD(str: string, key: string) {
- return CryptoJS.DES.encrypt(str, CryptoJS.enc.Hex.parse(toHex(key)), {
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
- }).toString();
- }
- export function decryptD(encStr: string, key: string): string {
- return CryptoJS.enc.Utf8.stringify(
- CryptoJS.DES.decrypt(encStr, CryptoJS.enc.Hex.parse(toHex(key)), {
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
- })
- );
- }
- /** TripleDES(无向量) 简写 E */
- export function encryptE(str: string, key: string) {
- return CryptoJS.TripleDES.encrypt(str, CryptoJS.enc.Hex.parse(toHex(key)), {
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
- }).toString();
- }
- export function decryptE(encStr: string, key: string): string {
- return CryptoJS.enc.Utf8.stringify(
- CryptoJS.TripleDES.decrypt(encStr, CryptoJS.enc.Hex.parse(toHex(key)), {
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
- })
- );
- }
|