cocosCreator 之 crypto-es数据加密

版本: 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
*/

结语


主要参考内容:

  • npm crypto-es
  • oops-framework

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

dgflash_game CSDN

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

oops Framework Creator游戏开发框架

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序 slot 不显示

问题:创建组件&#xff0c;使用带名字的slot&#xff0c;页面调用组件使用slot不显示 源码&#xff1a; 组件xml <view class"p-item br24" style"{{style}}"><slot name"right" wx:if"{{!custBottom}}"></slot>&l…

明星艺人类的百度百科怎么创建 ?

明星艺人们的知名度对于其事业的成功至关重要&#xff0c;而作为国内最大的中文百科全书网站&#xff0c;百度百科成为了人们获取信息的重要来源。一线明星当然百科不用自己操心&#xff0c;平台和网友就给维护了&#xff0c;但是刚刚走红的明星艺人应提早布局百科词条&#xf…

枚举类型 表示不同的 HTTP 状态码和相应的错误消息

java web业务中经常用常量来表示不同的 HTTP 响应状态,比如 public enum AppHttpCodeEnum {// 成功段0SUCCESS(200,"操作成功"),// 登录段1~50NEED_LOGIN(1,"需要登录后操作"),LOGIN_PASSWORD_ERROR(2,"密码错误"),// TOKEN50~100TOKEN_INVALID…

Docker容器音频播放之WSL篇

截至发文起&#xff0c;WSL已经支持音频播放。 但是&#xff0c;想在Docker中音频播放还需要一些额外的操作。 在启动容器时设置环境变量 PULSE_SERVER${PULSE_SERVER}并映射目录 /mnt/wslg/:/mnt/wslg/例如&#xff0c;docker-compose.yml version: 3 services:model-scop…

Who‘s Harry Potter? Approximate Unlearning in LLMs

本文是LLM系列文章&#xff0c;针对《Who’s Harry Potter? Approximate Unlearning in LLMs》的翻译。 哈利波特是谁&#xff1f;LLMs中的近似遗忘 摘要1 引言2 我们方法的描述3 评估方法4 结果5 结论 摘要 大型语言模型&#xff08;LLM&#xff09;是在大量的互联网语料库…

java商城免费搭建 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

maven环境变量,安装源,本地仓库配置

1. maven环境变量 我这里用的是idea自带的maven 数值为&#xff1a; D:\software\computer_software\java\IDEAJ\IDEAJ2021.2.1\IntelliJ IDEA 2021.2.1\plugins\maven\lib\maven3\bin 2. 安装源更换为阿里云&#xff08;我不知道清华源是什么网址&#xff0c;网上也没查到&am…

GPT实战系列-如何用自己数据微调ChatGLM2模型训练

GPT实战系列-如何用自己数据微调ChatGLM2模型训练 目录 GPT实战系列-如何用自己数据微调ChatGLM2模型训练1、训练数据广告文案生成模型训练和测试数据组织&#xff1a; 2、训练脚本3、执行训练调整运行 4、问题解决问题一问题二问题三问题四 1、训练数据 广告文案生成模型 输…

vue导出功能

<a-buttontype"primary"class"search-btn"click"downLoadClick">下载导出结果</a-button> // 下载导出结果 const downLoadClick async () > {try {const response await axios({url: ${getBaseUrl()}/gpt/admin/messageExport…

分布式:一文吃透分布式事务和seata事务

目录 一、事务基础概念二、分布式事务概念什么是分布式事务分布式事务场景CAP定理CAP理论理解CAPCAP的应用 BASE定理强一致性和最终一致性BASE理论 分布式事务分类刚性事务柔性事务 三、分布式事务解决方案方案汇总XA规范方案1&#xff1a;2PC第一阶段&#xff1a;准备阶段第二…

【计算机网络】什么是HTTPS?HTTPS为什么是安全的?

【面试经典题】 前言&#xff1a; HTTP最初的设计就是用于数据的共享和传输&#xff0c;并没有考虑到数据的安全性&#xff0c;如窃听风险&#xff0c;篡改风险和冒充风险。HTTPS是在 HTTP 的基础上引入了一个加密层。HTTPS通过数据加密&#xff0c;数据完整性检验和身份认证…

【Java 进阶篇】Java登录案例详解

登录是Web应用程序中常见的功能&#xff0c;它允许用户提供凭证&#xff08;通常是用户名和密码&#xff09;以验证其身份。本文将详细介绍如何使用Java创建一个简单的登录功能&#xff0c;并解释登录的工作原理。我们将覆盖以下内容&#xff1a; 登录的基本概念创建一个简单的…

安装Jdk 报错 ,Java SE Development Kit 8 Update 202(64-bit)安装完毕之前,向导被中断

具体原因没有找到&#xff0c;估计是由于jdk 没有删干净导致的&#xff0c;我的处理方法是&#xff0c;将 Java的注册表全然后手动安装 Jdk和导入注册表&#xff08;在同事那里获取jdk文件 压缩包&#xff0c;并将 java的注册表导出&#xff0c;放在自己电脑上使用。&#xff0…

ChatGPT扩展系列之ChatExcel

文章目录 ChatGPT扩展系列之ChatExcel对某一列的文字进行处理对数据进行排序对数据进行计算微软官方又推出Excel AI插件ChatGPT扩展系列之ChatExcel 自从ChatGPT很空出世之后,很多基于ChatGPT的应用便如雨后春笋般应用而生,这些应用的底层本质就是利用了ChatGPT对自然语言的…

Linux curl命令最全详解

https://blog.csdn.net/angle_chen123/article/details/120675472

M1本地部署Stable Diffusion

下载安装 参考博客: 在Mac上部署Stable Diffusion&#xff08;超详细&#xff0c;AI 绘画入门保姆级教程&#xff09; 安装需要的依赖库 brew install cmake protobuf rust python3.10 git wget 可能中途会存在下载报错或者下载卡主的问题,需要切国内源 brew进行替换源: …

树莓派 qt 调用multimedia、multimediawidgets、serialport、Qchats

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、测试11.命令安装出现错误 二、测试21. 安装 Qt Charts&#xff1a;2. 安装 Qt Multimedia 和 Qt MultimediaWidgets&#xff1a;3. 安装 Qt SerialPort&…

C/S架构和B/S架构

1. C/S架构和B/S架构简介 C/S 架构&#xff08;Client/Server Architecture&#xff09;和 B/S 架构&#xff08;Browser/Server Architecture&#xff09;是两种不同的软件架构模式&#xff0c;它们描述了客户端和服务器之间的关系以及数据交互的方式。 C/S 架构&#xff08…

Springboot的Container Images,docker加springboot

Spring Boot应用程序可以使用Dockerfiles容器化&#xff0c;或者使用Cloud Native Buildpacks来创建优化的docker兼容的容器映像&#xff0c;您可以在任何地方运行。 1. Efficient Container Images 很容易将Spring Boot fat jar打包为docker映像。然而&#xff0c;像在docke…

VS 控制台程序出现不能引用c的问题

在visual stduio测试纯c代码时&#xff0c;出现main调用c接口时不能引用的问题&#xff1a; 错误 LNK2019 无法解析的外部符号 "void __cdecl xxx_alg_init(void)" (?xxx_alg_initYAXXZ)&#xff0c;函数 main 中引用了该符号 xxx_alg_init 原因是c程序调…