
const {ccclass, property} = cc._decorator;
import CryptoJS = require('./crypto-js.min.js');  //引用AES源码js

const BASE_URL = "https://api.sparkus.cn";
//只负责网络接口 次类只负责和后端交互，不负责处理数据 数据处理在GameTool
@ccclass
export default class HttpUtil extends cc.Component {
    //排行榜

}


// 响应拦截器
// Rq.interceptors.response.use(responseHandler)
const config = {
  gameId: "100012",
  secretKey: "onnfPKJW",
  EK:"hui231%1"
};

interface CrypotoType {
  encryptByDES: any
  decryptByDES: any
  hmacSha256: any
}
 
class Crypoto implements CrypotoType {
    // 加密的向明值，自己根据项目实际情况定，需要跟后端开发保持一致
    private keyHex = this.getHetKey()
    private getHetKey() {
        return CryptoJS.enc.Utf8.parse(config.EK);
    }

    /** DES加密 */
    encryptByDES(message: string, secret?: string) {
      if(!message) {
        return message
      }
      const key = secret? CryptoJS.enc.Utf8.parse(secret): this.keyHex
      const encrypted = CryptoJS.DES.encrypt(message, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      });
      return encrypted.toString()
    }

    /** DES解密 */
    decryptByDES(message: string, secret?: string) {
      const key = secret? CryptoJS.enc.Utf8.parse(secret): this.keyHex

      const decrypted = CryptoJS.DES.decrypt({
        ciphertext: CryptoJS.enc.Base64.parse(message)
      }, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      })

      return decrypted.toString(CryptoJS.enc.Utf8)
    }

    /** hmacSHA256加密 */
    hmacSha256(message: string, secret?: string) {
      const keyHex = secret? CryptoJS.enc.Utf8.parse(secret): this.keyHex
      
      const hash = CryptoJS.HmacSHA256(message, keyHex);
      return hash.toString()
    }

    /** hmacSHA256验证 */
    verifyHmacSha256(message: string, signature: string) {
      const hash = CryptoJS.HmacSHA256(message, this.keyHex);
      return hash.toString() === signature
    }
 
    /** CBC加密 */
    encryptCBC(word: string) {
        if (!word) {
            return word;
        }
        const srcs = CryptoJS.enc.Utf8.parse(word);
        const encrypted = CryptoJS.AES.encrypt(srcs, this.keyHex, {
            iv: this.keyHex,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.ZeroPadding
        });
        return encrypted.toString(); 
    }
 
    /** CBC解密 */
    decryptCBC(word: string) {
        if (!word) {
            return word;
        }
        const encryptedHexStr = CryptoJS.enc.Hex.parse(word);
        const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        const decrypt = CryptoJS.AES.decrypt(srcs, this.keyHex, {
            iv: this.keyHex,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.ZeroPadding
        });
        const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        return decryptedStr.toString();
    }
}
const fxCry = new Crypoto();








