Sanakey
5 天以前 2af71bcf522c485ea005184c977986374a7dcc4a
src/utils/cipher.ts
@@ -1,55 +1,159 @@
import { encrypt, decrypt } from 'crypto-js/aes';
import { parse } from 'crypto-js/enc-utf8';
import { decrypt as aesDecrypt, encrypt as aesEncrypt } from 'crypto-js/aes';
import UTF8, { parse } from 'crypto-js/enc-utf8';
import pkcs7 from 'crypto-js/pad-pkcs7';
import ECB from 'crypto-js/mode-ecb';
import md5 from 'crypto-js/md5';
import UTF8 from 'crypto-js/enc-utf8';
import CTR from 'crypto-js/mode-ctr';
import Base64 from 'crypto-js/enc-base64';
import MD5 from 'crypto-js/md5';
import SHA256 from 'crypto-js/sha256';
import SHA512 from 'crypto-js/sha512';
// Define an interface for encryption
// 定义一个加密器的接口
export interface Encryption {
  encrypt(plainText: string): string;
  decrypt(cipherText: string): string;
}
// Define an interface for Hashing
// 定义一个哈希算法的接口
export interface Hashing {
  hash(data: string): string;
}
export interface EncryptionParams {
  key: string;
  iv: string;
}
export class AesEncryption {
  private key;
  private iv;
class AesEncryption implements Encryption {
  private readonly key;
  private readonly iv;
  constructor(opt: Partial<EncryptionParams> = {}) {
    const { key, iv } = opt;
    if (key) {
      this.key = parse(key);
    }
    if (iv) {
      this.iv = parse(iv);
    }
  constructor({ key, iv }: EncryptionParams) {
    this.key = parse(key);
    this.iv = parse(iv);
  }
  get getOptions() {
    return {
      mode: ECB,
      mode: CTR,
      padding: pkcs7,
      iv: this.iv,
    };
  }
  encryptByAES(cipherText: string) {
    return encrypt(cipherText, this.key, this.getOptions).toString();
  encrypt(plainText: string) {
    return aesEncrypt(plainText, this.key, this.getOptions).toString();
  }
  decryptByAES(cipherText: string) {
    return decrypt(cipherText, this.key, this.getOptions).toString(UTF8);
  decrypt(cipherText: string) {
    return aesDecrypt(cipherText, this.key, this.getOptions).toString(UTF8);
  }
}
export function encryptByBase64(cipherText: string) {
  return Base64.parse(cipherText).toString(UTF8);
// Define a singleton class for Base64 encryption
class Base64Encryption implements Encryption {
  private static instance: Base64Encryption;
  private constructor() {}
  // Get the singleton instance
  // 获取单例实例
  public static getInstance(): Base64Encryption {
    if (!Base64Encryption.instance) {
      Base64Encryption.instance = new Base64Encryption();
    }
    return Base64Encryption.instance;
  }
  encrypt(plainText: string) {
    return UTF8.parse(plainText).toString(Base64);
  }
  decrypt(cipherText: string) {
    return Base64.parse(cipherText).toString(UTF8);
  }
}
export function decodeByBase64(cipherText: string) {
  return Base64.parse(cipherText).toString(UTF8);
// Define a singleton class for MD5 Hashing
class MD5Hashing implements Hashing {
  private static instance: MD5Hashing;
  private constructor() {}
  // Get the singleton instance
  // 获取单例实例
  public static getInstance(): MD5Hashing {
    if (!MD5Hashing.instance) {
      MD5Hashing.instance = new MD5Hashing();
    }
    return MD5Hashing.instance;
  }
  hash(plainText: string) {
    return MD5(plainText).toString();
  }
}
export function encryptByMd5(password: string) {
  return md5(password).toString();
// Define a singleton class for SHA256 Hashing
class SHA256Hashing implements Hashing {
  private static instance: SHA256Hashing;
  private constructor() {}
  // Get the singleton instance
  // 获取单例实例
  public static getInstance(): SHA256Hashing {
    if (!SHA256Hashing.instance) {
      SHA256Hashing.instance = new SHA256Hashing();
    }
    return SHA256Hashing.instance;
  }
  hash(plainText: string) {
    return SHA256(plainText).toString();
  }
}
// Define a singleton class for SHA512 Hashing
class SHA512Hashing implements Hashing {
  private static instance: SHA512Hashing;
  private constructor() {}
  // Get the singleton instance
  // 获取单例实例
  public static getInstance(): SHA256Hashing {
    if (!SHA512Hashing.instance) {
      SHA512Hashing.instance = new SHA512Hashing();
    }
    return SHA512Hashing.instance;
  }
  hash(plainText: string) {
    return SHA512(plainText).toString();
  }
}
export class EncryptionFactory {
  public static createAesEncryption(params: EncryptionParams): Encryption {
    return new AesEncryption(params);
  }
  public static createBase64Encryption(): Encryption {
    return Base64Encryption.getInstance();
  }
}
export class HashingFactory {
  public static createMD5Hashing(): Hashing {
    return MD5Hashing.getInstance();
  }
  public static createSHA256Hashing(): Hashing {
    return SHA256Hashing.getInstance();
  }
  public static createSHA512Hashing(): Hashing {
    return SHA512Hashing.getInstance();
  }
}