替换security中的加密库为crypto-es,解决cc3.6.1 native加密库报错问题

This commit is contained in:
dgflash
2022-10-13 22:24:27 +08:00
parent 44f60ad5d9
commit 48e342ea75
13 changed files with 90 additions and 6374 deletions

View File

@@ -4,6 +4,7 @@
* @LastEditors: dgflash
* @LastEditTime: 2022-09-02 15:29:45
*/
import { ecs } from "../libs/ecs/ECS";
import { ECSRootSystem } from "../libs/ecs/ECSSystem";
import { LanguageManager } from "../libs/gui/language/Language";
import { HttpRequest } from "../libs/network/HttpRequest";
@@ -26,9 +27,9 @@ export class oops {
/** 日志管理 */
static log = Logger;
/** 全局消息 */
static message: MessageManager;
static message: MessageManager = MessageManager.Instance;
/** 本地存储 */
static storage: StorageManager;
static storage: StorageManager = new StorageManager();
/** 游戏时间管理 */
static timer: TimerManager;
/** 游戏音乐管理 */
@@ -45,7 +46,7 @@ export class oops {
/** 多语言模块 */
static language: LanguageManager;
/** HTTP */
static http: HttpRequest;
static http: HttpRequest = new HttpRequest();
/** ECS */
static ecs: ECSRootSystem;
static ecs: ECSRootSystem = new ecs.RootSystem();
}

View File

@@ -39,9 +39,12 @@ export class Root extends Component {
onLoad() {
console.log(`Oops Framework v${version}`);
this.init();
config.init(this.run.bind(this));
this.enabled = false;
config.init(() => {
this.enabled = true;
this.init();
this.run();
});
}
update(dt: number) {
@@ -64,17 +67,13 @@ export class Root extends Component {
}
protected init() {
oops.message = MessageManager.Instance;
oops.storage = new StorageManager();
oops.language = new LanguageManager();
oops.timer = new TimerManager(this);
oops.audio = AudioManager.instance;
oops.http = new HttpRequest();
oops.game = new GameManager(this.game!);
oops.gui = new LayerManager(this.gui!);
this.initGui();
oops.ecs = new ecs.RootSystem();
this.initEcsSystem();
oops.ecs.init();

View File

@@ -1,6 +1,5 @@
import { sys } from "cc";
import { PREVIEW } from "cc/env";
import { md5 } from "../../../libs/security/Md5";
import { EncryptUtil } from "../../utils/EncryptUtil";
/** 本地存储 */
@@ -15,8 +14,10 @@ export class StorageManager {
* @param iv aes加密的iv
*/
init(key: string, iv: string) {
this._key = md5(key);
this._iv = md5(iv);
EncryptUtil.initCrypto(key, iv);
this._key = EncryptUtil.md5(key);
this._iv = EncryptUtil.md5(iv);
}
/**
@@ -41,7 +42,7 @@ export class StorageManager {
return;
}
if (!PREVIEW) {
key = md5(key);
key = EncryptUtil.md5(key);
}
if (null == value) {
console.warn("存储的值为空,则直接移除该存储");
@@ -66,12 +67,7 @@ export class StorageManager {
}
if (!PREVIEW && null != this._key && null != this._iv) {
try {
value = EncryptUtil.aesEncrypt(`${value}`, this._key, this._iv);
}
catch (e) {
console.error(e);
}
value = EncryptUtil.aesEncrypt(`${value}`, this._key, this._iv);
}
sys.localStorage.setItem(key, value);
}
@@ -91,17 +87,12 @@ export class StorageManager {
key = `${key}_${this._id}`;
if (!PREVIEW) {
key = md5(key);
key = EncryptUtil.md5(key);
}
let str: string | null = sys.localStorage.getItem(key);
if (null != str && '' !== str && !PREVIEW && null != this._key && null != this._iv) {
try {
str = EncryptUtil.aesDecrypt(str, this._key, this._iv);
}
catch (e) {
console.error(e);
}
str = EncryptUtil.aesDecrypt(str, this._key, this._iv);
}
if (null === str) {
@@ -142,7 +133,7 @@ export class StorageManager {
key = `${key}_${this._id}`;
if (!PREVIEW) {
key = md5(key);
key = EncryptUtil.md5(key);
}
sys.localStorage.removeItem(key);
}

View File

@@ -4,8 +4,34 @@
* @LastEditors: dgflash
* @LastEditTime: 2022-09-02 14:50:10
*/
/** Crypto加密 */
import CryptoES from "crypto-es";
/**
* CryptoES 加密库封装
* https://github.com/entronad/crypto-es
*
* 安装第三方库生效
* npm install -g yarn
* yarn add crypto-es
*/
export class EncryptUtil {
private static key: string = null!;
private static iv: CryptoES.lib.WordArray = null!;
/**
* MD5加密
* @param msg 加密信息
*/
static md5(msg: string): string {
return CryptoES.MD5(msg).toString();
}
static initCrypto(key: string, iv: string) {
this.key = key;
this.iv = CryptoES.enc.Hex.parse(iv);
}
/**
* AES 加密
* @param msg 加密信息
@@ -13,15 +39,14 @@ export class EncryptUtil {
* @param iv aes加密的iv
*/
static aesEncrypt(msg: string, key: string, iv: string): string {
//@ts-ignore
let encrypt = CryptoJS.AES.encrypt(msg, key, {
iv: iv,
//@ts-ignore
mode: CryptoJS.mode.CBC,
//@ts-ignore
padding: CryptoJS.pad.Pkcs7
});
return encrypt.toString();
return CryptoES.AES.encrypt(
msg,
this.key,
{
iv: this.iv,
format: this.JsonFormatter
},
).toString();
}
/**
@@ -31,15 +56,40 @@ export class EncryptUtil {
* @param iv aes加密的iv
*/
static aesDecrypt(str: string, key: string, iv: string): string {
//@ts-ignore
let decrypt = CryptoJS.AES.decrypt(str, key, {
iv: iv,
//@ts-ignore
mode: CryptoJS.mode.CBC,
//@ts-ignore
padding: CryptoJS.pad.Pkcs7
});
//@ts-ignore
return CryptoJS.enc.Utf8.stringify(decrypt);
const decrypted = CryptoES.AES.decrypt(
str,
this.key,
{
iv: this.iv,
format: this.JsonFormatter
},
);
return decrypted.toString(CryptoES.enc.Utf8);
}
private static JsonFormatter = {
stringify: function (cipherParams: any) {
const jsonObj: any = { ct: cipherParams.ciphertext.toString(CryptoES.enc.Base64) };
if (cipherParams.iv) {
jsonObj.iv = cipherParams.iv.toString();
}
if (cipherParams.salt) {
jsonObj.s = cipherParams.salt.toString();
}
return JSON.stringify(jsonObj);
},
parse: function (jsonStr) {
const jsonObj = JSON.parse(jsonStr);
const cipherParams = CryptoES.lib.CipherParams.create(
{ ciphertext: CryptoES.enc.Base64.parse(jsonObj.ct) },
);
if (jsonObj.iv) {
cipherParams.iv = CryptoES.enc.Hex.parse(jsonObj.iv)
}
if (jsonObj.s) {
cipherParams.salt = CryptoES.enc.Hex.parse(jsonObj.s)
}
return cipherParams;
},
};
}

View File

@@ -1,12 +0,0 @@
{
"ver": "1.1.0",
"importer": "directory",
"imported": true,
"uuid": "0a77218f-7668-4c01-b3cf-4783473463b6",
"files": [],
"subMetas": {},
"userData": {
"compressionType": {},
"isRemoteBundle": {}
}
}

View File

@@ -1,202 +0,0 @@
export function md5(md5str: string) {
var createMD5String = function (string: string) {
var x = Array()
var k, AA, BB, CC, DD, a, b, c, d
var S11 = 7,
S12 = 12,
S13 = 17,
S14 = 22
var S21 = 5,
S22 = 9,
S23 = 14,
S24 = 20
var S31 = 4,
S32 = 11,
S33 = 16,
S34 = 23
var S41 = 6,
S42 = 10,
S43 = 15,
S44 = 21
string = uTF8Encode(string)
x = convertToWordArray(string)
a = 0x67452301
b = 0xEFCDAB89
c = 0x98BADCFE
d = 0x10325476
for (k = 0; k < x.length; k += 16) {
AA = a
BB = b
CC = c
DD = d
a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478)
d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756)
c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB)
b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE)
a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF)
d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A)
c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613)
b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501)
a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8)
d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF)
c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1)
b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE)
a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122)
d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193)
c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E)
b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821)
a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562)
d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340)
c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51)
b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA)
a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D)
d = GG(d, a, b, c, x[k + 10], S22, 0x2441453)
c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681)
b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8)
a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6)
d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6)
c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87)
b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED)
a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905)
d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8)
c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9)
b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A)
a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942)
d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681)
c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122)
b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C)
a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44)
d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9)
c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60)
b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70)
a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6)
d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA)
c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085)
b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05)
a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039)
d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5)
c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8)
b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665)
a = II(a, b, c, d, x[k + 0], S41, 0xF4292244)
d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97)
c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7)
b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039)
a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3)
d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92)
c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D)
b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1)
a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F)
d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0)
c = II(c, d, a, b, x[k + 6], S43, 0xA3014314)
b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1)
a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82)
d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235)
c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB)
b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391)
a = addUnsigned(a, AA)
b = addUnsigned(b, BB)
c = addUnsigned(c, CC)
d = addUnsigned(d, DD)
}
var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d)
return tempValue.toLowerCase()
}
var rotateLeft = function (lValue: number, iShiftBits: number) {
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits))
}
var addUnsigned = function (lX: number, lY: number) {
var lX4, lY4, lX8, lY8, lResult
lX8 = (lX & 0x80000000)
lY8 = (lY & 0x80000000)
lX4 = (lX & 0x40000000)
lY4 = (lY & 0x40000000)
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF)
if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8)
if (lX4 | lY4) {
if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8)
else return (lResult ^ 0x40000000 ^ lX8 ^ lY8)
} else {
return (lResult ^ lX8 ^ lY8)
}
}
var F = function (x: number, y: number, z: number) {
return (x & y) | ((~x) & z)
}
var G = function (x: number, y: number, z: number) {
return (x & z) | (y & (~z))
}
var H = function (x: number, y: number, z: number) {
return (x ^ y ^ z)
}
var I = function (x: number, y: number, z: number) {
return (y ^ (x | (~z)))
}
var FF = function (a: number, b: number, c: number, d: number, x: number, s: number, ac: number) {
a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac))
return addUnsigned(rotateLeft(a, s), b)
}
var GG = function (a: number, b: number, c: number, d: number, x: number, s: number, ac: number) {
a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac))
return addUnsigned(rotateLeft(a, s), b)
}
var HH = function (a: number, b: number, c: number, d: number, x: number, s: number, ac: number) {
a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac))
return addUnsigned(rotateLeft(a, s), b)
}
var II = function (a: number, b: number, c: number, d: number, x: number, s: number, ac: number) {
a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac))
return addUnsigned(rotateLeft(a, s), b)
}
var convertToWordArray = function (string: string) {
var lWordCount
var lMessageLength = string.length
var lNumberOfWordsTempOne = lMessageLength + 8
var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64
var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16
var lWordArray = Array(lNumberOfWords - 1)
var lBytePosition = 0
var lByteCount = 0
while (lByteCount < lMessageLength) {
lWordCount = (lByteCount - (lByteCount % 4)) / 4
lBytePosition = (lByteCount % 4) * 8
lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition))
lByteCount++
}
lWordCount = (lByteCount - (lByteCount % 4)) / 4
lBytePosition = (lByteCount % 4) * 8
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition)
lWordArray[lNumberOfWords - 2] = lMessageLength << 3
lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29
return lWordArray
}
var wordToHex = function (lValue: number) {
var WordToHexValue = '',
WordToHexValueTemp = '',
lByte, lCount
for (lCount = 0; lCount <= 3; lCount++) {
lByte = (lValue >>> (lCount * 8)) & 255
WordToHexValueTemp = '0' + lByte.toString(16)
WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2)
}
return WordToHexValue
}
var uTF8Encode = function (string: string) {
string = string.toString().replace(/\x0d\x0a/g, '\x0a')
var output = ''
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n)
if (c < 128) {
output += String.fromCharCode(c)
} else if ((c > 127) && (c < 2048)) {
output += String.fromCharCode((c >> 6) | 192)
output += String.fromCharCode((c & 63) | 128)
} else {
output += String.fromCharCode((c >> 12) | 224)
output += String.fromCharCode(((c >> 6) & 63) | 128)
output += String.fromCharCode((c & 63) | 128)
}
}
return output
}
return createMD5String(md5str)
}

View File

@@ -1,9 +0,0 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "0c84ecf9-5446-4322-8073-3e74289d8d1a",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -1,29 +0,0 @@
export const global: any;
declare global {
class WordArray { }
namespace CryptoJS {
namespace AES {
export function encrypt(message: string, key: string, cfg: { iv: string, mode: mode, padding: pad }): WordArray;
export function decrypt(text: string, key: string, cfg: { iv: string, mode: mode, padding: pad }): WordArray;
}
namespace enc {
namespace Utf8 {
export function parse(key: WordArray): string;
export function stringify(word: WordArray): string;
}
}
export enum mode {
CBC
}
export enum pad {
Pkcs7
}
}
}

View File

@@ -1,9 +0,0 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "3c1c0c1d-c9a4-4dd2-9249-254305a4c73b",
"files": [],
"subMetas": {},
"userData": {}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,16 +0,0 @@
{
"ver": "4.0.23",
"importer": "javascript",
"imported": true,
"uuid": "83485788-0873-4c9f-a03f-c9f9b5ee44ca",
"files": [
".js"
],
"subMetas": {},
"userData": {
"isPlugin": true,
"loadPluginInWeb": true,
"loadPluginInNative": false,
"executionScope": "enclosed"
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1,16 +0,0 @@
{
"ver": "4.0.23",
"importer": "javascript",
"imported": true,
"uuid": "f941aa5d-a758-4dca-a86b-98de4e775c51",
"files": [
".js"
],
"subMetas": {},
"userData": {
"dependencies": [],
"isPlugin": true,
"loadPluginInWeb": true,
"loadPluginInNative": false
}
}