我用 HarmonyOS 做了个加密App:密文看起来就是一段唐诗

鸿蒙第16篇——数据持久化 本文介绍的数据持久化是指鸿蒙应用的数据持久化存储。它是将内存中的数据通过文件或数据库的形式保存到设备存储中。鸿蒙支持多种数据存储方式, 包括用户首选项Preferences、 键值型数据库KV-Store和关系型数据库。 阅读详情

先说一件事

把手机递给别人的瞬间,你有没有想过备忘录里那些「密码123456」?

我有过。那种感觉促使我做了密语盒子——一个加密之后输出结果看起来像正常汉字的工具。不是乱码,不是 Base64,是一串你可以抄在便签上、发到朋友圈、截图给别人看,对方完全不会觉得「这是密文」的汉字序列。


核心设计:字谱替换 + AES-GCM 双层结构

密语盒子有两层机制,缺一不可。

第一层:强加密底层

用 AES-GCM + PBKDF2 做真正的密码学加密,完全离线,密钥不上传任何服务器。HarmonyOS 的 @ohos.security.cryptoFramework 模块提供了完整的对称加密支持,AES-GCM 的初始化向量每次随机生成,规避重放攻击。

// AES-GCM 加密参数,IV 每次随机生成
import cryptoFramework from '@ohos.security.cryptoFramework';

async function buildGcmParams(): Promise<cryptoFramework.GcmParamsSpec> {
  const rand = cryptoFramework.createRandom();
    const ivBlob = await rand.generateRandom(12); // 96-bit IV
      return {
          algName: 'GcmParamsSpec',
              iv: ivBlob,
                  aad: { data: new Uint8Array(0) },
                      authTag: { data: new Uint8Array(16) }
                        };
                        }
                        ```
**第二层:字谱替换**

这才是「视觉隐身」的关键。

AES 加密完的结果是二进制数据。我没有直接输出 Base64,而是先把原始字节做 Base64 编码——这一步把任意字节值收敛到 64 个 ASCII 字符范围内,再把这 64 个字符一一映射到你自定义的汉字集合上。你挑 64 个常用汉字,配成一套「字谱」,加密输出就变成了一串汉字。

```arkts
// 字谱编码:Base64字符 → 汉字序列
function encodeWithCipher(base64Str: string, cipher: string[]): string {
  // cipher 长度 64,对应标准 Base64 字符集
    if (cipher.length < 64) throw new Error('字谱字符数不足');
      const B64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
        return base64Str.split('').map(ch => {
            const idx = B64_CHARS.indexOf(ch);
                return idx >= 0 ? cipher[idx] : ch; // '=' padding 直接保留
                  }).join('');
                  }
                  ```
解密反向操作:输入同一套字谱 + 密码,汉字序列还原成 Base64 字符串,再走 AES-GCM 解密,得到明文。

字谱在 App 里可以自由编辑、保存多套。私密日记用一套《千字文》里选出来的字,和朋友约定聊天用另一套。外人看到的永远只是一段汉字。

---

## 鸿蒙开发踩坑实录

ArkUI 的声明式 UI 写起来和 SwiftUI 很像,`@State`、`@Link`、`@Observed` 这套响应式机制上手不难。密语盒子里的字谱编辑器是一个可滚动的汉字网格,用 `Grid` + `GridItem` 实现,点击选中/取消,状态全靠 `@State` 数组驱动,没有额外引状态管理库,这块写得挺顺。

真正费时间的是 `cryptoFramework` 里的 PBKDF2 派生密钥。具体踩的坑是这样的:`iterations` 参数的类型在文档里写的是 `number`,但我最初从另一个示例里抄来的代码用了 `bigint`,编译器报错指向的位置是完全不相关的 `GcmParamsSpec` 构造,跟 PBKDF2 没有半点关系。对着那个报错找了很久,最后才发现根源在 `iterations` 的类型上。

还有一个是 `Uint8Array` 和 `string` 之间的转换。不同 API 版本里 `TextEncoder` / `TextDecoder` 的行为有细微差异,在处理加密输出转字符串这条链路上翻车过一次,最后改成手动操作字节数组才稳定下来。

说实话,`cryptoFramework` 的能力已经够用,就是边界情况文档描述不够,DevEco Studio 的报错定位有时候会带歪方向。

---

## 几个真实场景,直接说

**账号密码明文备注**

这是我最常用的场景。密码用密语形式写在备忘录里,即使手机被人解锁翻到,看到的只是一段汉字,不会触发「这里有密码」的敏感信号。

**私密日记发公开平台**

在小红书写日记,有些段落不想被人看懂但又不想删。用密语盒子加密那段,输出汉字粘贴进去,外人读到只会以为是某种诗意表达。

**和朋友约定字谱聊天**

两人各自在 App 里导入同一套字谱,发密语原文,截图扩散出去也没人看得懂。有点「地下暗号」的感觉,我觉得这个用法最有意思。

---

## 现在的状态

1.2.0 刚上线,从后台看,进来的用户基本都是搜索「HarmonyOS 加密」或者「鸿蒙隐私工具」找到的,说明这个需求是真实存在的,不是我一个人的焦虑。

接下来想做的功能:字谱导入/导出(方便两个人共享同一套字谱),以及一个「字谱生成器」——输入一段文本,自动从中提取不重复汉字组成字谱配置,降低自定义门槛。

有一个方向考虑过但暂时放掉了:加「伪装文本模板」,让加密结果嵌入一段看起来像诗词的句子里。实现不难,但怎么让模板足够自然不露馅,设计成本比较高,先留着。

App 包名 com.xun.xxsecret,版本 1.2.0,鸿蒙应用市场搜「密语盒子」可以找到。

---

## 如果你也在用 ArkTS 处理原始字节

我现在最头疼的一个问题:`Uint8Array` 和 `string` 之间的转换,在不同 HarmonyOS API 版本里行为不一致,尤其是涉及非 ASCII 字节时,`TextDecoder` 的处理结果会出乎意料。你们有没有遇到过类似的情况?或者有更稳定的转换方案?欢迎在评论区说说。
CHARLS数据库下载避坑指南:从注册到数据获取的完整流程(2023最新版) 本文提供2023年最新版CHARLS数据库下载与使用全流程指南,涵盖从注册、数据申请到清洗的高效实践。重点解析邮箱选择、协议签署等关键步骤,并分享多线程下载、格式转换等实用技巧,助力研究者快速获取并处理这一中国中老年健康研究的黄金标准数据。 阅读详情

相关推荐

Excel数字变成了小数点+E+17?这些方法帮你解决!

本文介绍了三种解决Excel中数字变成小数点+E+17问题的方法:通过下拉箭头或右键菜单设置单元格格式为文本、使用TEXT函数将科学计数法转换为文本。这些方法各有优缺点,适用于不同的场景和需求。在实际应用中,我们可以根据具体情况选择合适的方法来解决问题。通过以上方法,我们可以轻松地从繁琐的小数点+E+17问题中解脱出来,更便捷地处理Excel中的数字。希望本文能够帮助到您,让您在使用Excel时更加得心应手!

nntxthml的博客 1242

【转】人文密码

ppnn13%dkstFeb.1st 这段密码的中文解析是:娉娉袅袅十三余,豆蔻梢头二月初。 csbt34.ydhl12s 这段密码的中文解析是:池上碧苔三四点,叶底黄鹂一两声

PawnshopArthur的专栏 439

本地部署开源视频会议解决方案 Jitsi Meet 并实现外网访问

Jitsi Meet 是一款基于 WebRTC 技术的开源视频会议解决方案,它允许用户通过互联网进行高质量的视频通话、语音通话和文本聊天,非常适合用于在线教育、远程办公、团队协作等场景。本文将详细介绍如何利用 Docker 在本地部署 Jitsi Meet 并结合路由侠实现外网访问本地部署的 Jitsi Meet。

lyxnwct的博客 1945

Abracadabra魔曰:当古典文学遇见现代加密,你的文字如何变成诗?

你是否曾经想过,你的密码、聊天记录或者机密信息,可以变成一首优美的古诗?Abracadabra魔曰正是这样一款革命性的加密工具,它将AES-256军事级加密技术与古典文言文完美融合,创造出既安全又优雅的加密体验。在这个数字安全日益重要的时代,这款开源工具为你提供了一个前所未有的解决方案——让敏感信息穿上文言文的外衣,既保护了数据安全,又赋予了技术以文化温度。 ## 从实用困境到诗意解决方案 想

gitblog_00599的博客 500

从光猫到机顶盒:H10G-13融合网关双系统网络配置全解析(含超密获取技巧)

本文详细解析了中国移动H10G-13融合网关的双系统网络配置,涵盖光猫路由与安卓电视盒子的协同工作。通过晶晨S905L3芯片的优化,设备实现高效网络接入与安卓9.0系统的定制化应用,特别适合酒店和民宿行业的智能化改造。文章还提供了超密获取技巧和线刷固件包的实用指南。

weixin_42525264的博客 944

基于YOLO11深度学习的糖尿病视网膜病变智能诊断系统【Python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍如何利用YOLO11深度学习技术构建糖尿病视网膜病变智能诊断系统。项目提供完整的Python源码、PyQt5图形界面、标注数据集及训练代码,实现从图片、视频到摄像头的多模态病变检测,旨在辅助医疗筛查,提升诊断效率。

weixin_29089057的博客 277

我在鸿蒙上做了一个加密工具,加密结果看起来像一段正常中文——聊聊密语盒子的 AES-GCM + 字谱替换设计

先用 AES-GCM 对明文做强加密(密钥通过 PBKDF2 从用户输入的密码派生),拿到密文字节流把密文字节流按自定义的「字谱」做映射,把每个字节替换成一个汉字或可读字符举个例子,假设我的字谱是一组 256 个汉字(刚好对应一个字节的 256 种取值),那加密后的每个字节都能找到对应的汉字。最终输出就是一串中文字,比如:“梧桐落叶时节青山远眺归雁南飞”外人看了觉得像诗句碎片,实际上它是一段被加密的内容。

same4869的博客 237

回归预测 | MATLAB实现MPR多元多项式回归

回归预测 | MATLAB实现MPR多元多项式回归

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1645

我做了一款鸿蒙原生加密App,加密后的密文看起来就是一段正常中文

我在 ArkTS 里把字谱抽象成了一个可序列化的数据结构,每套字谱本质上是一个 256 长度的字符映射表(对应一个字节的所有可能值)。HarmonyOS 在系统层面对隐私管控比较严,用户群体对隐私工具的接受度也更高,密语盒子这种完全离线的加密工具放在这个平台上,用户信任感会更强。说白了,传统加密工具解决了"看不懂"的问题,但没解决"看得出你在藏东西"的问题。这就是我说的「视觉伪装」——信息在公开场合"隐身",而不是"看起来被加密了"。同类型的加密工具在鸿蒙上几乎找不到做得好的,这是个窗口期。

same4869的博客 221

海康机器人visionmaster5.0全局通信西门子S7操作

德国西门子(SIEMENS)公司生产的可编程序控制器在我国的应用也相当广泛,在冶金、化工、印刷生产线等领域都有应用。西门子(SIEMENS)公司的PLC产品包括S7-200、S7-1200、S7-300、S7-400、S7-1500等。西门子S7系列PLC体积小、速度快、标准化,具有网络通信能力,功能更强,可靠性高。S7系列PLC产品可分为微型PLC(如S7-200),小规模性能要求的PLC(如S7-300)和中、高性能要求的PLC(如S7-400)等。

weixin_65316120的博客 420

芒果YOLO11改进137:卷积AKConv篇,即插即用,具有任意采样形状和任意数量的参数的卷积内核

卷积AKConv篇,即插即用,具有任意采样形状和任意数量的参数的卷积内核

包括YOLOv5、YOLOv7、YOLOv8等模型改进 295

鸿蒙上做了个加密工具——密文看起来像正常汉字 | 开发记录

你可以用任意一组汉字作为密文字母表,原始明文经过 AES-GCM 加密后,再经过字谱替换,最终输出的字节序列被映射成你定义的汉字组合。举个例子:你定义了一套以古诗常用字为字谱,加密结果就可能是「山色空蒙雨亦奇,欲把西湖比西子」——看起来就是一句唐诗,但实际上藏着你的银行账户密码。我想做的是另一种东西:加密之后,结果看起来就是一段正常的中文。你有没有试过,把一个加密字符串发给朋友,结果对方第一反应是——「你发这干嘛,被黑了?密语盒子的「字谱」是整个 App 最核心的设计,也是我花时间最多的部分。

same4869的博客 63

VTK实战完整教程介绍

该专栏以VTK提供的Example为基础,讲解VTK中的相关接口和使用方法。订阅该专栏,带你了解所有VTK的功能,以便VTK更好的解决工作中遇到的问题。一起学习起来吧!

qq_40041064的博客 2502

HarmonyOS 7 端侧 AI 图像超分的工程化落地

用户抱怨网络差的时候图片传不上去,更严重的是,大量的私密照片上传到云端,引发了严重的隐私合规审查危机。痛定思痛后,我们决定把 AI 模型直接塞进手机里,用端侧的 NPU 来做推理,但这绝非易事。我们首先在服务端对模型进行了知识蒸馏,把参数砍掉了一大半,然后利用 MindSpore Lite 的转换工具,将模型转成了鸿蒙底层支持的。即便如此,模型依然有 20 多兆,我们最终选择了 FP16 量化,牺牲了极其微小的画质,换取了内存占用减半。推理过程极其消耗 CPU 和内存,稍微大一点的图,处理时间长达几秒。

2602_97267507的博客 156

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

〖物流终端实战 05〗纯血鸿蒙 ArkTS 高阶性能优化:长列表渲染、组件复用与内存泄漏排查

本文深度剖析鸿蒙ArkTS高阶性能优化,直击长列表卡顿与内存泄漏痛点。针对渲染,指出ForEach全量构建的缺陷,强调采用LazyForEach(V2推荐Repeat)配合增量通知及稳定业务Key;针对组件复用,明确@Reusable仅复用实例不重置状态,必须在aboutToReuse中手动清理UI状态;针对内存泄漏,总结全局监听未注销、定时器未清理及长生命周期对象持有页面引用三大元凶,并指导通过DevEco Profiler的Heap快照排查引用链。文章强调优化需遵循“先定位后改代码”原则,助力开发者打造

Eyf • 半字节的博客 633

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

AppGallery 上架自检 SOP:签名、隐私对齐与包体校验实战【鸿蒙心迹】

上架被驳回多因签名、隐私声明与包体不一致。本文提炼“签名→隐私对齐→包体校验”自检SOP,配套一键脚本与权限三角校验代码,实现90%驳回前置拦截。通过CI强制release签名、代码/声明/功能三者权限对齐、包体完整性校验,确保提审一次过。实战清单可直接抄,让过审从运气变为流程。

wdracky的专栏 311

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 162

窗口销毁了监听还在,HarmonyOS 7 生命周期释放的归属分界

综上所述,onWindowStageWillDestroy 是窗口监听的最后安全出口,onWindowStageDestroy 只负责断开窗口引用,onDestroy 管 Ability 级资源——三者不是“程度不同的退出回调”,而是各自有明确的归属范围。窗口监听的所有者是 WindowStage,定时器的所有者是 UIAbility,播放器的所有者是页面或 Ability(取决于你在哪一层创建的),ApplicationContext 监听的所有者是 Ability 的 context。

qq_61905492的博客 197

鸿蒙平板能当电脑第二块屏幕吗?ToDesk、向日葵镜像/副屏实测

本文对比测试了ToDesk鸿蒙版4.8.3.0与向日葵鸿蒙版16.8.0在连接鸿蒙平板作为电脑副屏的表现。结果显示,ToDesk可直接实现镜像屏与扩展屏功能,支持参数调节,操作流畅;而向日葵副屏需开通会员才能使用。对于已有鸿蒙平板的用户,ToDesk能有效拓展工作空间,提升多任务效率,尤其适合临时办公、出差等场景,具备较高实用价值。

2501_91062530的博客 2312

React Native for OpenHarmony 实战:react-native-file-logger 日志库鸿蒙化适配

本文记录了将 react-native-file-logger 适配至 OpenHarmony 的实战过程。基于鸿蒙 7.0 模拟器,通过 5 个 TurboModule 方法实现日志落盘、轮转、列举与删除,采用 fileIo 实现核心功能,支持按大小和跨天轮转,归档文件命名精确至毫秒。邮件发送功能因平台限制按能力边界处理,明确拒绝并提示用户手动导出。验证通过,日志文件结构清晰,内容完整,产出 HAP 示例与独立 HAR 库,中英双语文档齐全,为鸿蒙应用日志管理提供可靠方案。

m0_62930060的博客 232

【鸿蒙心迹】深色模式适配全链路——从配置到自定义(HarmonyOS 7.x)

系统切深色模式,应用没跟着变;图片在深色模式下刺眼;自定义绘制颜色没适配——深色模式不是"换个背景色",是颜色/图片/材质/状态栏的全链路适配。本文用涟漪睡眠 App 适配深色模式为案例,给完整方案与 5 个踩坑。

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 361

【共创稿事节】HarmonyOS 7.0 Marquee跑马灯:从接入到生产验证

HarmonyOS 7.0 Marquee跑马灯:从接入到生产验证:真实工程复盘,附代码与验证方法。

2401_84996024的博客 160

平行视界兼容模式与魔法变量配置避坑【鸿蒙心迹】

本文详解折叠屏兼容模式下“魔法变量”配置的五大易错点,强调maxWindowRatio与minWindowRatio必须满足max ≥ min、centerAlign需显式设为true、minCompitableVersion拼写为Compitable等关键细节。通过校验函数实现上线前批量机型测试,结合排查流程图快速定位分栏失效问题。虽兼容模式可零代码实现分栏,但存在状态共享风险,长期仍建议按规范开发原生平行视界分栏。

wdracky的专栏 1086

HarmonyOS 7 应用冷启动与包体积优化实录

我们在构建脚本里加入了一个自动转换任务,将除了极其复杂的透明图之外的所有静态资源,全部转换为 WebP 格式。为了这 5% 的用户,让 95% 的用户承担 30MB 的下载成本,显然不划算。目录,里面躺着无数历史遗留的高清切图,有些是早被废弃的活动图,有些是同一张图的多个尺寸备份。这一招,直接砍掉了将近 15MB 的死重。我们将短视频相关的所有代码、图片、甚至底层的播放器三方库,全部剥离到了独立的 Feature 模块(HSP)中。包变小了,启动速度自然会快一点,但真正的瓶颈在于冷启动时的初始化逻辑。

2502_91284977的博客 169

鸿蒙远程控制软件哪个好?华为远程PC、ToDesk、向日葵三款实测

综合来看,本次横测最终更推荐ToDesk:它在支持跨品牌连接的基础上,外接鼠标、全屏远控、移动设备协助和多屏功能覆盖更完整,更适合作为主力远控工具。

2401_85083137的博客 332

HarmonyOS 分布式深度:跨端迁移、数据对象与多设备协同

本文深入解析鸿蒙分布式能力实战,聚焦跨端迁移、协同与共享三大形态,详解权限配置、设备发现、onContinue状态管理及分布式数据对象、KV同步机制。强调“先分清场景”“前置条件必全”“数据需重验”,揭示迁移失败、同步失效等七大常见坑,指导开发者规避陷阱,实现真实可用的多设备协同。

信息安全领域优质创作者|操作系统领域专家 59
上一篇: 我做了一个鸿蒙版订阅管理App——那笔你完全想不起来的25块扣费
下一篇: 鸿蒙真机帧率崩了:ArkUI 呼吸动画 GPU/Canvas fallback 排查全过程
SameX-4869
博客等级 码龄17年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值