cocosCreator 之 crypto-es数据加密

本文介绍了在CocosCreator3.x项目中,如何对明文数据进行加密保护,如对称加密(AES)、非对称加密(RSA)、哈希函数(MD5)和使用crypto-esnpm包的封装。还提供了基础的加密解密示例以及封装类EncryptUtil的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本: 3.8.0

语言: TypeScript

环境: Mac


简介


项目开发中,针对于一些明文数据,比如本地存储和Http数据请求等,进行加密保护,是有必要的。

关于加密手段主要有:

  • 对称加密 使用相同的密钥来加密和解密数据,常用的有AES、DES、3DES
  • 非对称加密 使用公钥加密,私钥解密,常用的有RSA、DSA
  • 哈希函数 将任意长度的数据映射为固定长度的哈希值,特点是不可逆,常用的有MD5、SHA-1、SHA-256
  • 消息认证码(MAC) 使用密钥对消息进行加密,并附加在消息中,以确保消息的完整性和真实性 常用的有HMAC
  • 数字签名 用于对数据进行签名,以验证数据的来源和完整性,常用的有 RSA、DSA

有些时候为了数据的安全,也会使用base64的策略。

它只是一种将二进制数据转换为可打印字符的编码方式,属于编码算法而非加密算法

该篇文章并非讲述加密算法的各种使用,主要说明内容: 在cocosCreator 3.x中对于明文数据的保护。


crypto-es


crypto-esnpm提供的用于加密和解密的包。

它提供了各种加密算法和工具,包括对称加密、哈希函数、数字签名和公钥加密等。此外,它还支持生成随机数、密码学密钥管理等。

在cocosCreator中使用crypto-es,需要npm进行下载。打开终端,进入项目目录,然后运行命令:

npm install crypto-es

需要了解更多NPM,可参考文档:NPM的使用介绍

下载成功后,crypto-es 会放到项目目录 ./node_modules中。

然后在脚本中直接引用即可。

import CryptoES from "crypto-es";

简单的示例:

const key = "encrypt";
const value = "Hello Encrypt";
console.log("加密前的数据:", value);
let value_1 = CryptoES.AES.encrypt(value, key).toString();
console.log("加密后的数据:", value_1);
let value_2 = CryptoES.AES.decrypt(value_1, key).toString(CryptoES.enc.Utf8);
console.log("解密后的数据:", value_2);

/*
加密前的数据: Hello Encrypt
加密后的数据: U2FsdGVkX1/cqGU/G7xGVONeYS4R6sRjZYkMeAmUcdQ=
解密后的数据: Hello Encrypt
*/

更多内容可参考: npm crypto-es


封装


在此感谢oops-framework开源框架的作者,对加密相关进行了封装。

主要文件实现在:EncryptUtil.ts

import CryptoES from "crypto-es";

export class EncryptUtil {
    private static _key: string = "";
    private static _iv: CryptoES.lib.WordArray = null;

    // 初始化加密库
    static initCrypto(key: string, iv: string) {
        this._key = key;
        this._iv = CryptoES.enc.Hex.parse(iv);
    }
    
    // MD5加密
    static md5(msg: string) {
        return CryptoES.MD5(msg).toString();
    }

    // AES加密
    static aesEncrypt(msg: string, key?: string, iv?: string): string {
        return CryptoES.AES.encrypt(
            msg,
            this._key,
            {
                iv: this._iv,
                format: this.JsonFormatter
            },
        ).toString();
    }

    // AES解密
    static aesDecrypt(str: string, key?: string, iv?: string): string {
        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: any) {
            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;
        },
    };
}

简单的示例:

import { EncryptUtil } from './EncryptUtil';

const key = "encrypt";
const value = "Thank you oops-framework";
EncryptUtil.initCrypto("key", "vi");
console.log("加密前的数据:", value);
let value_1 = EncryptUtil.aesEncrypt(value);
console.log("加密后的数据:", value_1);
let value_2 = EncryptUtil.aesDecrypt(value_1);
console.log("解密后的数据:", value_2);

/*
加密前的数据: Thank you oops-framework
加密后的数据: 
{"ct":"Vb2dOMFJ/7LCdPVa/VnpCj9+7cF3u48FuqRGhOlexmU=","iv":"0ed38252b2cde8ee545bd527853dd6be","s":"b7368ad0d8714ec7"}
解密后的数据: Thank you oops-framework
*/

结语


主要参考内容:

关于oops-framework的其他内容可参考原作者博客分享:

dgflash_game 优快云

我个人也汇总了一篇关于oops的博客,可参考:

oops Framework Creator游戏开发框架

最后,祝大家学习生活愉快!

<think>好的,我现在需要在Cocos Creator中集成crypto-es加密库。首先,用户提到了通过npm安装,所以我得先确认项目的环境是否支持npm。Cocos Creator项目通常使用npm管理依赖,所以应该没问题。 接下来,安装命令是`npm install crypto-es`,需要确保终端当前目录是项目根目录。安装完成后,可能需要检查package.json里是否添加了依赖,但通常npm会自动处理。不过有时候可能需要手动保存,比如使用`npm install crypto-es --save`,但用户给的示例命令没有`--save`,可能新版本npm默认已经保存了。 然后是导入的问题。用户提供的引用里没有具体说明如何在代码中引入,但根据常见的ES模块用法,应该使用import语句。比如`import * as cryptoES from 'crypto-es'`或者按需导入特定模块,比如AES、SHA256等。但要注意Cocos Creator对ES模块的支持情况,特别是如果项目设置是用的require而不是import,可能需要配置或者插件支持。 另外,用户提到了Base64编码,但指出它不是加密算法。所以在使用crypto-es时,可能需要结合具体的加密方法,比如AES、RSA等,然后需要处理密钥管理、加密模式、填充方式等问题。不过用户的问题主要是导入和使用库,所以重点放在如何正确引入和调用API上。 测试部分,用户可能需要写一个简单的加密解密示例,比如使用AES加密字符串,然后解密回来,确保功能正常。同时,需要注意浏览器或平台兼容性,比如Cocos打包到Web或原生平台时,是否有环境限制,比如某些加密算法可能需要特定的Polyfill或插件。 还有可能遇到的问题,比如npm安装后,Cocos构建时没有自动包含node_modules,可能需要配置构建步骤,或者在项目中设置模块解析路径。此外,如果出现模块找不到的错误,可能需要检查Cocos项目的模块系统设置,或者使用绝对路径导入。 总结步骤应该是:安装依赖、正确导入模块、编写加密代码、处理兼容性和构建配置。同时提醒用户注意加密算法的正确使用和安全事项,比如密钥不应硬编码在代码中等。</think>### Cocos Creator 中集成 crypto-es 加密库的步骤 #### 1. 安装 crypto-es 库 在 Cocos Creator 项目根目录下打开终端,执行以下命令安装依赖: ```bash npm install crypto-es ``` 安装完成后,`node_modules` 目录中会包含 `crypto-es` 的模块文件[^1]。 #### 2. 在代码中导入模块 根据需求选择按需导入或全局导入: - **按需导入**(推荐,减少代码体积): ```javascript import AES from 'crypto-es/aes.js'; import Utf8 from 'crypto-es/lib-typedarrays.js'; // 处理编码 ``` - **全局导入**: ```javascript import * as cryptoES from 'crypto-es'; ``` #### 3. 使用加密功能示例(以 AES 加密为例) ```javascript // 加密函数 encryptData(plainText, key) { const encrypted = AES.encrypt( Utf8.parse(plainText), Utf8.parse(key) ).toString(); return encrypted; } // 解密函数 decryptData(cipherText, key) { const decrypted = AES.decrypt( cipherText, Utf8.parse(key) ).toString(Utf8); return decrypted; } ``` #### 4. 处理兼容性问题 若遇到模块加载错误,需在 Cocos Creator 的 **项目设置 -> 模块设置** 中勾选 `crypto-es` 相关模块(如 `crypto`、`buffer` 等),确保打包时包含依赖。 #### 5. 安全注意事项 - **密钥管理**:避免硬编码密钥,建议通过服务端动态获取或使用环境变量。 - **编码规范**:若需传输加密数据,可结合 Base64 编码[^2],但需注意 Base64 本身不具备加密功能。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹤九日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值