我做了一款鸿蒙加密App,加密后的密文看起来像一段正常中文——聊聊 AES-GCM + 字谱替换的实现思路

【NCBI】SRA toolkit安装及使用-Windows&Linux版本 由于市面上的文章介绍SRA toolkit基本上都是基于Linux,而在windows下运行SRA toolkit基本上可以达到相同的效果且更为方便,故本文将分别阐明在Windows和Linux环境下SRA toolkit的安装及使用。 阅读详情

起因:加密结果为什么非得是乱码?

去年有个朋友问我:“我想把一些私密笔记存在手机便签里,但又怕被人看到,有没有什么办法?”

我说用加密工具啊。他说试过,加密完一串 Base64 或者乱码放在便签里,别人一看就知道"这条是加密过的",反而更引人注意。

这句话点醒了我。

传统加密工具的问题不在于加密强度不够,而在于加密结果本身就在宣告"我被加密了"。对于很多日常场景——比如备忘录里记个密码、朋友之间传个悄悄话——你需要的不只是"别人解不开",而是"别人根本不觉得这里有东西需要解"。

所以我做了「密语盒子」,一个鸿蒙原生的加密工具。它的核心卖点就一句话:加密结果是一段看起来完全正常的中文文字。

技术方案:AES-GCM 加密 + 自定义字谱映射

整体分两层:

底层加密用的是 AES-GCM + PBKDF2 派生密钥。这部分没什么花活,就是保证密码学层面的安全性。HarmonyOS 提供了 @ohos.security.cryptoFramework 模块,AES-GCM 的实现可以直接调系统能力,不需要自己搬 OpenSSL。

上层伪装才是这个 App 的灵魂。加密产生的二进制数据,通常工具会用 Base64 编码输出,我换了一种做法——用一套「字谱」做映射。

说白了,字谱就是一个字符集合,比如你可以定义一套字谱是"天地玄黄宇宙洪荒日月盈昃辰宿列张"这些字。加密后的每个字节,按索引映射到字谱中的某个汉字。最终输出的就是一串看起来像诗句、像随笔的中文文本。

关键代码大概长这样:

// 将加密后的字节数组映射到字谱字符
function bytesToCipherText(encrypted: Uint8Array, charset: string[]): string {
  let result = ''
    for (let i = 0; i < encrypted.length; i++) {
        // 高4位和低4位分别映射,确保字谱长度16即可覆盖
            let high = (encrypted[i] >> 4) & 0x0F
                let low = encrypted[i] & 0x0F
                    result += charset[high] + charset[low]
                      }
                        return result
                        }
                        ```
这样做的好处是:字谱完全由用户自定义。你可以用《千字文》里的字,也可以用菜单上的菜名,甚至用 emoji。只要收发双方约定同一套字谱和密码,就能互相解读。

## 鸿蒙适配过程中踩的坑

说实话做鸿蒙版比我预想的顺利一些,ArkUI 的声明式写法上手之后效率还行。但有几个地方折腾了一阵:

1. **剪贴板权限**。密语盒子的核心操作流程是"加密→复制→粘贴到别处",鸿蒙对剪贴板的管控比较严格,`pasteboard` 模块在后台状态下行为和前台不一样,我调了两天才搞清楚生命周期的影响。
2. **文本输入框的性能**。用户可能粘贴很长的密文进来解密,ArkUI 的 `TextArea` 组件在文本量大的时候渲染有点卡。最后我做了分段渲染,超过一定长度就先截断显示,点击展开全文。
3. **字谱编辑器**。这个功能我试了三种交互方案。第一版是表格填写,太笨重;第二版是自由文本输入然后自动拆分,用户反馈说搞不清哪个字对应哪个位置;最终第三版用了类似标签流的布局,每个字是一个可拖拽的 tag,直观多了。
```arkts
// 字谱编辑器 - 标签流布局
Flex({ wrap: FlexWrap.Wrap, space: { main: LengthMetrics.vp(8), cross: LengthMetrics.vp(8) } }) {
  ForEach(this.charsetArray, (char: string, index: number) => {
      Text(char)
            .fontSize(16)
                  .padding({ left: 12, right: 12, top: 6, bottom: 6 })
                        .backgroundColor(this.selectedIndex === index ? '#4FC3F7' : '#F5F5F5')
                              .borderRadius(16)
                                    .onClick(() => { this.selectedIndex = index })
                                      })
                                      }
                                      ```
## 当前状态

密语盒子鸿蒙版 1.2.0 已经上架华为应用市场,完全免费,无广告,数据全离线不联网。

说实话,这个 App 目前下载量很小。我分析了一下,一方面是品类太小众,大部分人没有"加密后还要伪装"这个需求意识;另一方面是我之前几乎没做过推广,就是静默上架等自然流量,结果当然约等于零。

但从留存数据看,用过的人留下来的比例还不错。有几个用户在评论区说用来和对象传悄悄话,这倒是我没想到的使用场景。

## 为什么选择做鸿蒙原生而不是跨平台

这个问题我考虑过。密语盒子的核心依赖两个能力:加密 API 和剪贴板。HarmonyOS 的 `cryptoFramework` 接口封装得比较干净,AES-GCM 支持完整,不需要额外引入第三方库。如果用 Flutter 或 RN 做跨平台,反而要桥接原生加密模块,多一层不说,还有安全审核的麻烦。

对了,鸿蒙的应用审核对加密类 App 有额外审查,提交的时候需要在备注里说明加密用途和算法类型,第一次被打回来就是因为这个没写清楚。后来补了一份算法说明文档就过了。

## 后续计划

下个版本打算加两个东西:

- **密语分享卡片**:生成一张好看的图片,密文嵌在图里,分享到社交平台更自然
- - **字谱市场**(本地的):预置几套有趣的字谱模板,比如"外卖菜单风"、"古诗词风"、"数学公式风",降低用户自己编字谱的门槛
如果你也在做 HarmonyOS 开发,或者对加密/信息隐藏这个方向感兴趣,欢迎交流。我的鸿蒙开发笔记后续也会陆续整理发出来。
贪婪投影三角化算法 贪婪投影三角化算法是一种利用点云数据进行曲面重建的方法。其基本思想是通过迭代地连接点云中的邻近点来生成三角形,从而构建出整个表面。这种方法被称为“贪婪”,因为它在每一步仅考虑当前最优的策略,而不考虑全局的最优性。 阅读详情

相关推荐

分布式数据采集框架openclaw-worker:模块化设计与实战指南

数据采集是获取网络信息、实现自动化处理的基础技术,其核心原理是通过模拟HTTP请求从目标源提取结构化数据。在工程实践中,传统单体脚本面临维护困难、扩展性差等挑战。分布式采集架构通过解耦任务定义与执行,结合消息队列实现水平扩展,显著提升了系统的弹性与可靠性。openclaw-worker作为模块化的工作节点,将采集流程配置化,支持CSS选择器、XPath等多种提取规则,并集成请求速率控制、代理IP池等反爬策略,适用于竞品监控、内容聚合等需要高效、稳定获取数据的应用场景。

weixin_28706423的博客 298

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 154

解决 Clawdbot 对接 Minimax 出现 401 (Token is unusable) 的问题排查与修复

即便确认 API Key 有效且余额充足,该问题仍可能在 Clawdbot 中持续出现,而在其他工具(如 curl 或 Postman)中测试正常。

hampeter的博客 3075

4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法

4G 功能机如何选择操作系统?本文梳理 KaiOS、Mocor、MAUI、PMAOS 四条路线的技术定位与能力边界,从市场认证、应用清单、芯片与 BSP、内存与整机成本、交付维护五个维度建立选型流程,并提供场景决策矩阵和签约前八项验证清单,帮助研发与产品团队区分平台宣称、演示能力与目标机型的实际交付能力。

PMAOS的博客 182

ANSYS workbench (关于normal stiffness factor接触刚度因子)

关于normal stiffness factor接触刚度因子的含义和设置方法

weixin_43730845的博客 6799

CTF 命令执行绕过总结

tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示。或:rce-xor-or.php & rce-xor-or.py。# ls -t >shell 将输出输入到shell文件中。异或:rce-xor.php & rce-xor.py。%09(url传递)(cat%09flag.php)sh /flag 2>%261 //报错出文件内容。2、1使用空变量$*和$@,$x,${x}绕过。7、异或无符号(过滤0-9a-zA-Z)more:一页一页的显示档案内容。

jnszstmei的博客 1958

iOS 小组件开发,Windows 上用 KXBuild 加 WidgetKit 扩展 给 App 加 iOS 桌面小组件

iOS 小组件开发用 WidgetKit。这篇在 Windows 上用 KXBuild 的 add-target --type widget 给 SwiftUI 工程加一个桌面小组件扩展:写时间线和主屏小号/中号、锁屏圆形多种尺寸界面,用 App Group 和 App 共享数据,App 里调 WidgetCenter 主动刷新,按 F5 装到 iOS 17+ 的 iPhone 调试,再随 ipa 一起上架。以喝水打卡为例,附 App ID、描述文件准备和小组件不刷新、签名报错的排查。

2501_91600747的博客 181

【实战指南】基于YOLOv11的肺结节检测系统开发与优化(LUNA2016数据集)

本文提供了基于YOLOv11模型和LUNA2016数据集开发肺结节检测系统的完整实战指南。详细介绍了从环境搭建、数据预处理、模型训练与优化,到构建Web应用系统的全流程,旨在帮助开发者快速掌握医疗影像AI项目的核心开发技能。

weixin_29031057的博客 140

React Native项目开发(iOS侧为例)

本文基于React Native 0.71+,通过npx react-native init初始化项目后,详细讲解如何使用TypeScript搭建两个页面:入口页(Entrance.tsx)和我的页面(Profile.tsx)。重点介绍了配置tsconfig.json、初始化TypeScript环境、集成React Navigation实现页面跳转,并通过创建共享类型文件(navigation.ts)实现路由类型安全。文章还涵盖依赖安装、iOS构建问题排查、目录结构规范及常见错误解决方案。

D_xw_的博客 232

AIGC算法工程师面试八股文深度解析与进阶指南:揭秘Diffusion Models核心原理与实战技巧

总结来说,Cosine Noise Scheduler 的核心优势在于它能够更巧妙地平衡信号和噪声的比例,在扩散过程的早期阶段更长时间地保留原始图像的细节信息,从而为去噪模型提供一个更友好的学习环境,最终带来更优异的生成质量。🚀

FJN110的博客 344

SE80 Repository Information System 在 SAP CRM WebClient UI 组件分析中的实战指南

在 SAP CRM WebClient UI 开发过程中,如何快速定位组件、视图、上下文节点以及各类运行时对象,一直是调试效率的关键。(后文简称RIS)正是隐藏在SE80里的瑞士军刀,帮助开发者按照组件集、数据元素、上下文节点属性等多维条件进行交叉检索。官方博客将它描述为本文结合多年项目经验,系统梳理RIS的功能脉络与实战技巧,同时引入真实案例,示范如何借助它在几分钟内完成以往动辄数小时的排查任务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2万+

安卓IOS打包证书

.p12 、 .mobileprovision 、 keystore 相关证书申请

weixin_58431406的博客 273

实验二 离散控制系统的性能分析(时域/频域)

1.掌握离散闭环系统的动态性能时域参数的分析与计算方法; 2.掌握离散系统稳定性的频域典型参数分析与计算方法。 MATLAB 软件( 2022a); 1.在 Matlab 语言平台上,通过给定的闭环离散系统,深刻理解时域参数的物理意义与计算方法,内容包括如下: 阻尼比参数分析:Z 平面与 S 平面的极点相互转换编程实现;分析 S/Z 两个平面域特殊特性(水平线、垂直线、斜线、圆周等)的极点轨迹相互映射方法;系统阶跃响应参数:上升时间和超调量等。 2. 采用频域分析方法,通过编程计算,进一步理解离散系统的稳定

m0_51738372的博客 2479

iOS 推送通知怎么实现,从 APNs p8 密钥到 iOS 真机收到第一条推送

iOS 推送通知要跑通,核心是 App ID 开通 Push Notifications 并重新生成描述文件、签名带上 aps-environment、再用 APNs 的 .p8 密钥签 JWT 把推送发到设备令牌。这篇用 KXBuild 按五步做:开能力、加 entitlements、代码里请求权限拿设备令牌、建 .p8 认证密钥、用一段 Node 脚本或 curl 走 HTTP/2 发测试推送,让 iPhone 弹出第一条通知。附拿不到令牌、APNs 报错码、TestFlight 收不到的排查。

2501_91591841的博客 219

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

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

[iOS]Runtime2

为了让你在父类中依然能访问当前对象(也就是子类的实例),编译器在底层会生成一个结构体,叫 : 当调用 时,底层调用的函数是 : 拿着(也就是当前的子类对象)作为消息接收者,但是把方法查找的起点定位在了 (父类)这里需要注意的就是仍然是调用者自己,即先讲一下上篇没讲过的,我们如果缓存未命中,那我们就会进入慢速查找,现在我们来详细的讲解在进入慢速查找的瞬间会再看一遍方法列表,然后立刻调用加锁,因为多线程下别人正在动态添加方法或者扩容,不加锁会崩溃类就绪OC的机制就是在编译期只生成了 结构,当类首次被发送消息时(

wzm20070304的博客 216

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标

上架前,iOS 的 App 图标、启动屏和多语言这三样配不齐,上传时就可能被拦或显示不对。这篇用 KXBuild 一次配好:图标只要一张 1024×1024、不带透明通道的 PNG,在资源目录编辑器里右键就生成全部尺寸,还支持 iOS 18 深色/着色和 Xcode 26 的 .icon;启动屏在 Info.plist 的 UILaunchScreen 填背景色和 Logo;界面文字、App 名称用 .xcstrings 翻译,商店信息再到 App Store Connect 按语言填。附上架前检查清单。

2501_91600889的博客 274

Appuploader 创建 iOS 描述文件详解,Development / Ad Hoc / App Store

搞不清 iOS 描述文件(Provisioning Profile)该选 Development、Ad Hoc 还是 App Store?本文讲清四种类型各装到哪、哪些要绑设备、能不能上架,重点辨析最容易混的 Development 与 Ad Hoc,说明设备或证书变动后为什么要重建、重建后要重新导入签名,并给出不用 Mac 在 Windows/Linux 上用 Appuploader 新建与重建描述文件的实操步骤,附装机"描述文件不匹配"等常见问题排查。

2501_91373349的博客 214

Windows 开发 iOS,Sign in with Apple 苹果登录,KXBuild 真机调试全流程

Sign in with Apple 接入分四步:App ID 开能力并重新生成描述文件,entitlements 加 com.apple.developer.applesignin,用 SignInWithAppleButton 拿 identityToken 交服务端验签,删账号时调 revoke。本文讲清审核指南 4.8 为什么要你提供它、姓名邮箱只给一次、用 user 当主键,并在 Windows 上用 KXBuild 真机测登录,附 1000 报错排查。

2501_91373349的博客 203

iOS 深度链接配置教程,URL Scheme 与 Universal Links,KXBuild 真机验证

深度链接两种:URL Scheme(myapp://)只改 Info.plist 的 CFBundleURLTypes;Universal Links(https://)要开 Associated Domains、在 entitlements 写 applinks 域名、网站放 /.well-known/apple-app-site-association。讲清两者怎么选、onOpenURL 处理代码,在 Windows 上用 KXBuild 装 Debug 包真机验证,附 CDN 缓存和十个不跳转排查。

2501_91600747的博客 261

手机远程控制电脑哪家强?2026年iOS/安卓/鸿蒙横评实测,ToDesk/向日葵谁更流畅

手机远程控制电脑已成刚需,ToDesk凭借全平台覆盖、低延迟、无广告、免费不限速等优势,成为最佳选择。其iOS、安卓、鸿蒙及Mac系统均支持,实测连接快、操作流畅,虚拟键盘、外接键鼠、互动批注等功能体验出色。相较之下,向日葵存在限时踢线、传输慢、广告多等痛点。选购建议:无论用何种手机,首选ToDesk,实现高效便捷的远程办公与协助。

lx08113的博客 270

Cocos Creator3.8.8 + Xcode27.2 编译运行失败

Cocos Creator3.8构建IOS工程后,使用最新的Xcode27.2版本进行真机调试,遇到C++标准库冲突,如is_floating_point、is_arithmetic和is_signed失败,以及webp对齐失败等问题。

HYNN12的博客 302

go消息推送之极光推送 (JPush REST API + SDK,覆盖安卓与iOS)

使用 gorush有个绕不开的问题:国内安卓设备上 FCM 基本不可达,华为、小米、OPPO、vivo 各自为政——此时可用极光推送(JPush)作解决方案。它的思路和前面几家都不一样:App 集成极光 SDK 后拿到统一的 RegistrationID,服务端发一条 REST 请求,极光云端自动把消息路由到 APNs、各家厂商通道或极光自有长连接。这里给出了:一个用纯标准库直接调用极光的;另一个用社区维护的,类型化参数,接口注释与官方文档逐条对应。两个功能相同,可放在一起对比学习。

qq_40467670的博客 157

华为昇腾910B4(A2)服务器环境搭建笔记

Qwen3.5 默认支持思考模式。首次测试建议关闭思考模式,更容易判断模型是否成功回答。我建议把模型统一存放在宿主机的 /data/models 目录中。这样即使删除 Docker 容器,模型文件也不会丢失。这里先进行单卡测试,确保容器能正确调用 NPU。安装ModelScope 用于下载模型。继续在刚才的容器内部执行。

guoqingru0311的博客 287

IPD咨询洞察:华为项目文化:让胜利成为一种信仰

华为“让胜利成为信仰”的本质是使命必达,落地为五项内核:开放创新、勇于担当、团队协同、契约精神、善思善结。使命必达不能停留在墙面标语,须转化为可落地、可考核的行为准则,胜利才能真正成为团队习惯。

weixin_58096508的博客 92

手头只有华为配置,新设备是华三?粘进来自动翻

手头有华为配置,新设备是华三?用「跨厂商转换」工具,粘贴配置后自动识别源厂商,一键转成目标厂商语法,支持华为、华三、锐捷、迈普、思科等主流设备。精准处理VLAN、access/trunk口、SVI IP、VTY/SSH等差异,避免手动修改时漏改“拼写级”错误。转换后需人工核对核心项与独有特性,建议结合备份、比对与模拟验证,确保安全上机。

qq_42614669的博客 383

第10篇:打包上架:签名、打包 HAP、发布到华为应用市场

打包上架:签名、打包 HAP、发布到华为应用市场

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

【2026-11-06】华为研发机试三道编程题解

本文整理了华为11月6日研发岗三道编程题解法:第一题为按列填充句子,通过枚举行数模拟列宽计算,求最小行数;第二题为生鲜库存优化,利用动态分配思想,预处理“采购-销售”成本,贪心选择最便宜来源满足需求;第三题涉及AC自动机与动态规划结合的序列化奖励问题。代码均以Java实现,思路清晰,适合笔试刷题参考。关注公众号【TechGuide】获取更多真题解析。

试问道几许 339
上一篇: 用 SwiftData 做了个订阅管理 App「订阅斩」——把取消订阅做成游戏化体验的技术思路
下一篇: 我用 ArkTS 写了个「吃什么」决策工具,聊聊鸿蒙开发中几个有意思的实现细节
SameX-4869
博客等级 码龄17年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值