尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Autojs基础-加密与解密
1.前言脚本开发过程中除了启动时保存在内存中的一些数据还需要保存一下永久数据。我们不会像程序开发一样将数据保存到数据库中这样需要配置远程服务器成本也太多了。我们一般将数据保存到本地的txt文件中这就涉及一些关键数据的加密问题。尤其是账号密码等关键信息我们为了安全都是加密保存然后到脚本中解密使用。我在脚本开发时除了非常简单的数据哪怕是脚本一些配置信息都会加密保存。比如一些游戏脚本的战斗配置我也会加密保存这样更安全加密和解密过程是非常迅速的不用担心影响脚本运行速度。当然加密也分简单加密和复杂加密。大部分脚本一般采用简单加密的方式我更加推荐复杂加密的方式。我平时脚本开发过程中一直使用的复杂加密的方式。虽然很少有人会将保存到本地的数据尝试自己加密但是我还是推荐复杂加密的方式。加密就是为了更加安全在不影响脚本运行速度的前提下肯定选择更加安全的加密方式。2.简单加密1.概况简单加密就是使用base64的方式进行加密就是利用base64的编码和解码过程实现简单的加密和解密。熟悉base64的都知道这种加密也就是能够表面加密任何人再通过base64解码实现解密。由于base64加密和解密过程非常简单并且大部分脚本使用者根本不了解代脚本开发因此许多脚本开发者都使用这种方式加密。但是我不推荐这种方式就行数据加密。如果调用官方自带的base64会出现未找到的报错。因为我们使用的是免费版很容易出现这个问题。我们可以封装两个函数来实现官方文档中的功能可以通过js实现base64功能或者调用已经存在的base64函数。autojs能够调用java中的类型或者接口为了减少工作量我直接在封装函数中调用java的相关函数了。封装的编码函数base64Encode和解码函数base64Decode分别官方文档中base64的encode函数和decode函数功能一致。// base64编码 function base64Encode(str, encoding) { encoding encoding ? encoding : utf-8; return java.util.Base64.getEncoder().encodeToString(new java.lang.String(str).getBytes(encoding)); } // base64解码 function base64Decode(str, encoding) { encoding encoding ? encoding : utf-8; return new java.lang.String(java.util.Base64.getDecoder().decode(str), encoding); }2.base64Encode对应官方文档的base64.encode函数将字符串编码需要传递传递两个参数分别为需要编码的字符串和字符编码参数类型均为字符串。一般情况下因为有些数据可能为中文字符编码选择utf-8即可。解码的字符编码要与编码的字符编码一致这样才能解密。由于编码和解码要配合使用会在解码部分一起通过代码进行举例说明。3.base64Decode对应官方文档的base64.decode函数将字符串解码需要传递传递两个参数分别为需要解码的字符串和字符编码参数类型均为字符串。字符串解码要和字符串编码过程中的字符编码一致由于我们数据中很容易出现中文我们可以将字符串编码和字符串解码的字符编码一直设置为utf-8。字符串编码过程中要编码的字符串的类型为字符串如果不是字符串的数据先要转换为字符串然后再进行编码。// 设置对象类型的初始数据 let obj { test1: 测试1, test2: 测试2 } // 由于不是字符串类型先转换为字符串 let objString JSON.stringify(obj); console.log(对象转换为字符串的数据为); console.log(objString); console.log(----------------------------); // 设置字符编码 let characterEncoding utf-8; // 进行base64编码 let base64String base64Encode(objString, characterEncoding); console.log(base64加密后的数据为); console.log(base64String); console.log(----------------------------); // 进行base64解码 let base64DecodeString base64Decode(base64String, characterEncoding); console.log(base64解密后的数据为); console.log(base64DecodeString); console.log(----------------------------); // 将字符串转换为对象 let targetObj JSON.parse(base64DecodeString); console.log(解密后对象数据为); console.log(targetObj); // base64编码 function base64Encode(str, encoding) { encoding encoding ? encoding : utf-8; return java.util.Base64.getEncoder().encodeToString(new java.lang.String(str).getBytes(encoding)); } // base64解码 function base64Decode(str, encoding) { encoding encoding ? encoding : utf-8; return new java.lang.String(java.util.Base64.getDecoder().decode(str), encoding); }在脚本开发中可以配合文件系统进行使用将加密后的字符串通过文件保存到本地使用时读取本地文件然后解密。3.复杂加密1.概况复杂加密是通过官方文档中“加解密与消息摘要”部分的内容实现这部分的其他内容很少使用根据需求自行学习。这部分内容有各种加密方式每种加密的使用方式也不同官方对于这方面的介绍比较少也有概率免费版不支持全部功能。因此我推荐使用AES这种加密方式这种加密方式安全性还是比较高的同时我已经封装好函数了大家可以直接调用。2.encrypt通过AES进行加密需要传递两个参数分别为要加密的数据和加密密钥参数类型分别为任意类型和字符串。其中加密密钥必须为16位。// AES加密 // data需要加密的数据 // key加密密钥必须16位 function encrypt(data, key) { let javaData new java.lang.String(data); // 加密算法 let encryptionAlgorithm AES; let cipher javax.crypto.Cipher.getInstance(encryptionAlgorithm); let secretKey new javax.crypto.spec.SecretKeySpec(key.getBytes(UTF-8), encryptionAlgorithm); cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, secretKey); let encrypted cipher.doFinal(javaData.getBytes(UTF-8)); return android.util.Base64.encodeToString(encrypted, android.util.Base64.DEFAULT); }3.decrypt通过AES进行解密需要传递两个参数分别为加密后的数据和加密密钥参数类型均为字符串。其中加密密钥必须为16位。// AES解密 // encrypted需要解密的数据 // key加密密钥必须16位 function decrypt(encrypted, key) { // 加密算法 let encryptionAlgorithm AES; let cipher javax.crypto.Cipher.getInstance(encryptionAlgorithm); let secretKey new javax.crypto.spec.SecretKeySpec(key.getBytes(UTF-8), encryptionAlgorithm); cipher.init(javax.crypto.Cipher.DECRYPT_MODE, secretKey); let decrypted cipher.doFinal(android.util.Base64.decode(encrypted, android.util.Base64.DEFAULT)); return new java.lang.String(decrypted, UTF-8).toString(); }下面是加密和解密的使用方式其实和上面的base64方式类似只是多了个加密密钥。这个16位密钥可以自己随便生成只有这密钥和加密时使用的密钥相同才能成功解析出数据大大提高了加密的安全性。// 设置对象类型的初始数据 let obj { test1: 测试1, test2: 测试2 } // 由于不是字符串类型先转换为字符串 let objString JSON.stringify(obj); console.log(对象转换为字符串的数据为); console.log(objString); console.log(----------------------------); // 加密秘钥(必须16位)可以随便输入16位 let encryptionKey new java.lang.String(kjsnxlemzienglkn); // 进行AES加密 let aesString encrypt(objString, encryptionKey); console.log(AES加密后的数据为); console.log(aesString); console.log(----------------------------); // 进行AES解密 let aesDecodeString decrypt(aesString, encryptionKey); console.log(AES解密后的数据为); console.log(aesDecodeString); console.log(----------------------------); // 将字符串转换为对象 let targetObj JSON.parse(aesDecodeString); console.log(解密后对象数据为); console.log(targetObj); // AES加密 // data需要加密的数据 // key加密密钥必须16位 function encrypt(data, key) { let javaData new java.lang.String(data); // 加密算法 let encryptionAlgorithm AES; let cipher javax.crypto.Cipher.getInstance(encryptionAlgorithm); let secretKey new javax.crypto.spec.SecretKeySpec(key.getBytes(UTF-8), encryptionAlgorithm); cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, secretKey); let encrypted cipher.doFinal(javaData.getBytes(UTF-8)); return android.util.Base64.encodeToString(encrypted, android.util.Base64.DEFAULT); } // AES解密 // encrypted需要解密的数据 // key加密密钥必须16位 function decrypt(encrypted, key) { // 加密算法 let encryptionAlgorithm AES; let cipher javax.crypto.Cipher.getInstance(encryptionAlgorithm); let secretKey new javax.crypto.spec.SecretKeySpec(key.getBytes(UTF-8), encryptionAlgorithm); cipher.init(javax.crypto.Cipher.DECRYPT_MODE, secretKey); let decrypted cipher.doFinal(android.util.Base64.decode(encrypted, android.util.Base64.DEFAULT)); return new java.lang.String(decrypted, UTF-8).toString(); }
RELATED

相关推荐

Autojs基础-app(应用)

Autojs基础-app(应用)

1.前言初次看这部分内容,感觉功能好强大,尤其是应用启动部分,感觉好方便。我只能说抱歉,这部分内容很多获取的autojs自己的各种信息,而不是当前应用的信息,还有一些函数平时不会使用或者特殊情况使用不方便…

📅 2026/9/9 16:45:41
Autojs基础-坐标操作

Autojs基础-坐标操作

1.前言坐标操作是基于坐标,模拟人的点击、长按、滑动、触摸等操作。虽然这部分内容比较简单,但是这是脚本开发最重要的部分。坐标操作贯穿脚本的整个过程,每个脚本开发软件都会带有这些功能,我这里就不过多介绍。2.setScreenMetri…

📅 2026/10/3 11:56:09
OpenKM文档管理系统怎么用?一份从部署到团队落地的完整上手教程

OpenKM文档管理系统怎么用?一份从部署到团队落地的完整上手教程

OpenKM文档管理系统怎么用?一份从部署到团队落地的完整上手教程 【免费下载链接】document-management-system OpenKM is a Open Source Document Management System 项目地址: https://gitcode.com/gh_mirrors/do/document-management-system "这份合同…

📅 2026/9/11 9:19:07
MORE NEWS

更多资讯

📰

基于RNN、LSTM与GRU的气象数据预测实战:Python代码解析与避坑指南

简介:这份资源围绕循环神经网络(RNN、LSTM、GRU)在气象数据预测中的应用展开,面向本科、硕士阶段从事神经网络预测方向学习与教研的读者,也适合希望用Python动手实践时序建模的开发者。压缩包共13个文件,约…

📰

从生成工具到创作智能体:H3 开源背后,MiniMax 在下一盘什么棋

从生成工具到创作智能体:H3 开源背后,MiniMax 在下一盘什么棋 【免费下载链接】Minimax-H3-ComfyUI 项目地址: https://ai.gitcode.com/hf_mirrors/Alissonerdx/Minimax-H3-ComfyUI 2026 年 8 月 3 日,MiniMax 正式开源新一代通用视频…

📰

Flickr30k跨模态搜索实战:双塔模型与对比学习课程设计

简介:本资源为基于Flickr30k数据集的图像—文本跨模态搜索Python项目,面向计算机、人工智能、通信工程等专业的在校学生与教师,可用于媒体计算实践作业、课程设计或毕业设计。项目围绕跨模态检索任务,提供从数据划分、图像预处理到…

📰

基于深度学习的锂电池SOH评估:Python实战与避坑指南

简介:这份资源围绕锂电池健康状态(SOH)评估展开,采用深度学习方法对NASA锂电池容量衰退数据集进行建模,并进一步分析引入运行可监测数据后对SOH预测效果的影响。内容适合计算机、人工智能、电子信息、数学等相关专业学…

📰

9Router 自托管部署指南:把 AI 网关搬进自己的服务器

9Router 自托管部署指南:把 AI 网关搬进自己的服务器 【免费下载链接】9router Unlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40 providers. Auto-fallback, RTK -40% tokens, never…

📰

知识蒸馏实战:用mattevans-distil压缩大模型到小设备

简介:mattevans-distil 是一个用 Go 语言编写的轻量级内存数据集过滤开源项目,面向需要在程序内对结构化数据做条件筛选的开发者,尤其适合刚接触 Go 数据处理、想通过源码理解过滤逻辑实现的学习者。项目围绕数据集过滤这一核心场景&#xff…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬