别让数据裸奔!鸿蒙开发中加密技术的正确打开方式【华为根技术】

举报
Echo_Wish 发表于 2025/04/30 21:21:31 2025/04/30
【摘要】 别让数据裸奔!鸿蒙开发中加密技术的正确打开方式

别让数据裸奔!鸿蒙开发中加密技术的正确打开方式


一、你以为的小程序,其实是个“裸奔”现场?

在鸿蒙应用开发中,很多开发者专注的是功能是否完整、页面是否顺滑、交互是否炫酷,但却很少关心数据传输和存储是否安全

想象一下下面几个场景:

  • 用户登录凭证,保存在明文 SharedPreferences 中;
  • 用户定位信息,传输给后台 API 时没有加密;
  • 本地缓存文件,被第三方 APP 轻松读取;
  • 通信过程中数据包被抓包工具直接解析出内容

你辛辛苦苦开发的鸿蒙应用,一旦被黑客盯上,可能连“道歉公告”都来不及写完,数据就被爬空了。

Echo_Wish 想说:安全不是选配,而是基础配置!


二、鸿蒙开发中必须面对的“加密三板斧”

在鸿蒙应用中,主流的加密技术主要分为以下三类,几乎覆盖了所有关键安全场景:

场景 推荐加密技术 典型用途
数据存储 AES 对称加密 用户配置、本地缓存
网络通信 HTTPS + RSA 非对称加密 请求数据签名、身份认证
关键验证 哈希算法(如 SHA256) 密码校验、完整性校验

为什么要分类使用?

  • AES 快速、适合本地存储
  • RSA 安全、适合数据交换
  • Hash 算法不可逆,适合认证和防篡改

让我们结合鸿蒙代码实战一个个来看。


三、实战一:用 AES 加密用户信息,别再明文存储了!

在鸿蒙中存储数据常用 PreferencesDataStorage,如果你直接这么写:

preferences.set({
  key: "user_token",
  value: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
});

就等于直接把钥匙挂在门外,别人稍微一反编译就拿到了。

正确做法:使用 AES 加密存储

import crypto from '@ohos.security.crypto';  // 鸿蒙内置加密模块(HarmonyOS NEXT)

let key = crypto.generateAesKey(); // 生成对称密钥
let encrypted = crypto.encryptAes({
  key: key,
  data: "user_secret_token",
});
preferences.set({
  key: "user_token",
  value: encrypted
});

解密时同理,用 crypto.decryptAes 还原。

即使设备被 Root,黑客也拿不到明文数据。


四、实战二:用 RSA 给请求签名,防止“中间人”伪造请求

如果你开发的鸿蒙应用需要访问云端接口,且涉及订单、转账等核心操作,强烈建议你加上请求签名机制。

签名过程:

  1. 客户端用 RSA 私钥对请求数据签名;
  2. 服务端用 RSA 公钥验证签名;
  3. 数据一旦被篡改,签名验证失败。
let data = JSON.stringify({
  orderId: "123456",
  amount: "999"
});

let signature = crypto.signRsa({
  privateKey: rsaPrivateKey,
  message: data
});

发给服务端的请求中加入 signature 字段,服务端用公钥验证即可。

这在鸿蒙分布式设备中(比如手机发起请求,平板协同确认)特别重要,否则中间人可伪造指令发起支付。


五、实战三:用 SHA256 存密码,从此不怕撞库攻击

永远不要把用户密码“存储”或“回显”,即使你觉得只是做个 Demo。

正确姿势是将用户输入的密码做哈希处理,再比对:

let inputPassword = "123456";
let hash = crypto.hashSha256(inputPassword);

// 存入或比对的不是明文,而是 hash 值

这种方式即使数据库被窃取,也不怕撞库攻击,毕竟哈希不可逆

如果你担心暴力破解,还可以加盐(salt)增加复杂度:

let salt = "harmony_salt";
let hash = crypto.hashSha256(inputPassword + salt);

六、鸿蒙系统的额外安全加分项:HUK + TEE

在鸿蒙系统中,华为还提供了更底层的加密能力支持:

HUK(Hardware Unique Key):

  • 每台鸿蒙设备硬件中唯一的密钥;
  • 可用于生成应用专属加密密钥,别人拷贝也没用

TEE(Trusted Execution Environment):

  • 类似“加密小黑屋”;
  • 存储、加解密操作都在 TEE 中完成,应用进程本身都接触不到密钥明文

你可以通过调用 DeviceSecurityManagerKeyStore 等接口,利用系统级安全模块进一步增强应用防护。


七、开发者常见的加密误区

误区 为什么危险
用 Base64 代替加密 Base64 只是编码,不是加密
密钥硬编码写死 一反编译就被暴露
明文传输数据再加密 网络层可能早已被抓包
只信 HTTPS 而不验签 HTTPS 加密的是通道,不是数据本身

安全是一种“多层防护”,不能只靠单一手段。


八、总结:鸿蒙应用开发,不加密等于裸奔!

别以为你的应用没上架、不火、没人用就没人盯。安全永远不是等“出事了再补”,而是从第一行代码就开始。

回顾一下今天的内容:

  • 用 AES 加密本地敏感数据;
  • 用 RSA 进行请求签名和身份验证;
  • 用 SHA256 存密码,防止撞库攻击;
  • 善用鸿蒙底层安全能力(HUK + TEE);
  • 加密不是“选做题”,而是“必修课”。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。