115 lines
3.0 KiB
TypeScript
115 lines
3.0 KiB
TypeScript
|
|
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();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|