鸿蒙多功能工具箱开发实战(二十七)-安全加固与数据保护
鸿蒙多功能工具箱开发实战(二十七)-安全加固与数据保护前言安全是应用开发的重要考量。本文将讲解HarmonyOS应用的安全加固和数据保护措施。一、敏感数据保护1.1 数据加密importcryptoFrameworkfromohos.security.cryptoFrameworkexportclassCryptoUtil{/** * AES加密 */staticasyncaesEncrypt(plainText:string,key:string):Promisestring{try{// 创建加密器constciphercryptoFramework.createCipher(AES256|CBC|PKCS7)// 生成密钥constsymKeyawaitthis.generateAesKey(key)// 加密constinput{data:newUint8Array(Buffer.from(plainText).buffer)}awaitcipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE,symKey,null)constoutputawaitcipher.doFinal(input)// 转Base64returnthis.uint8ArrayToBase64(output.data)}catch(e){console.error(AES encrypt failed:,e)throwe}}/** * AES解密 */staticasyncaesDecrypt(cipherText:string,key:string):Promisestring{try{constciphercryptoFramework.createCipher(AES256|CBC|PKCS7)constsymKeyawaitthis.generateAesKey(key)// Base64转Uint8Arrayconstinput{data:this.base64ToUint8Array(cipherText)}awaitcipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE,symKey,null)constoutputawaitcipher.doFinal(input)returnBuffer.from(output.data).toString()}catch(e){console.error(AES decrypt failed:,e)throwe}}privatestaticasyncgenerateAesKey(key:string):PromisecryptoFramework.SymKey{constkeyBlob:cryptoFramework.DataBlob{data:newUint8Array(Buffer.from(key.padEnd(32,0).slice(0,32)).buffer)}constgeneratorcryptoFramework.createSymKeyGenerator(AES256)returnawaitgenerator.convertKey(keyBlob)}privatestaticuint8ArrayToBase64(data:Uint8Array):string{returnBuffer.from(data).toString(base64)}privatestaticbase64ToUint8Array(base64:string):Uint8Array{returnnewUint8Array(Buffer.from(base64,base64).buffer)}}1.2 密码哈希exportclassPasswordUtil{/** * 生成密码哈希 */staticasynchash(password:string,salt?:string):Promise{hash:string,salt:string}{// 生成盐值constsaltValuesalt||this.generateSalt()// SHA256哈希constmdcryptoFramework.createMd(SHA256)awaitmd.update({data:newUint8Array(Buffer.from(passwordsaltValue).buffer)})constresultawaitmd.digest()return{hash:Buffer.from(result.data).toString(hex),salt:saltValue}}/** * 验证密码 */staticasyncverify(password:string,hash:string,salt:string):Promiseboolean{constresultawaitthis.hash(password,salt)returnresult.hashhash}privatestaticgenerateSalt():string{constrandomnewUint8Array(16)for(leti0;i16;i){random[i]Math.floor(Math.random()*256)}returnBuffer.from(random).toString(hex)}}二、安全存储2.1 安全偏好设置exportclassSecurePreferences{privatestaticinstance:SecurePreferencesprivatepreferences:PreferencesprivateencryptionKey:stringprivateconstructor(){}staticasyncgetInstance():PromiseSecurePreferences{if(!SecurePreferences.instance){constinstancenewSecurePreferences()instance.preferencesawaitpreferences.getPreferences(globalThis.context,secure_prefs)instance.encryptionKeyawaitinstance.getOrCreateKey()SecurePreferences.instanceinstance}returnSecurePreferences.instance}/** * 安全存储数据 */asyncputSecure(key:string,value:string):Promisevoid{constencryptedawaitCryptoUtil.aesEncrypt(value,this.encryptionKey)awaitthis.preferences.put(key,encrypted)awaitthis.preferences.flush()}/** * 安全读取数据 */asyncgetSecure(key:string):Promisestring|null{constencryptedawaitthis.preferences.get(key,)asstringif(!encrypted)returnnulltry{returnawaitCryptoUtil.aesDecrypt(encrypted,this.encryptionKey)}catch(e){console.error(Decrypt failed:,e)returnnull}}privateasyncgetOrCreateKey():Promisestring{letkeyawaitthis.preferences.get(master_key,)asstringif(!key){keyPasswordUtil.generateSalt()awaitthis.preferences.put(master_key,key)awaitthis.preferences.flush()}returnkey}}三、网络安全3.1 HTTPS证书校验importhttpfromohos.net.httpexportclassSecureHttpClient{privatehttpClient:http.HttpClientconstructor(){this.httpClienthttp.createHttp()}/** * 安全HTTP请求 */asyncsecureRequest(url:string,options:http.HttpRequestOptions):Promisehttp.HttpResponse{// 强制HTTPSif(!url.startsWith(https://)){thrownewError(Only HTTPS is allowed)}returnnewPromise((resolve,reject){this.httpClient.request(url,{...options,// 证书校验header:{...options.header,X-Content-Type-Options:nosniff,X-Frame-Options:DENY}},(err,data){if(err){reject(err)}else{resolve(data)}})})}}3.2 请求签名exportclassRequestSigner{privatestaticsecretKeyyour-secret-key/** * 生成请求签名 */staticsign(params:Recordstring,any):string{// 排序参数constsortedKeysObject.keys(params).sort()constsignStrsortedKeys.map(k${k}${params[k]}).join()// HMAC-SHA256签名constmaccryptoFramework.createMac(HMACSHA256)// ... 签名实现returnsignStr}/** * 验证签名 */staticverify(params:Recordstring,any,signature:string):boolean{constexpectedSignthis.sign(params)returnexpectedSignsignature}}四、权限控制4.1 敏感操作保护exportclassAuthGuard{privatestaticlastAuthTime:number0privatestaticauthTimeout:number5*60*1000// 5分钟/** * 检查是否需要认证 */staticneedAuth():boolean{constnowDate.now()returnnow-this.lastAuthTimethis.authTimeout}/** * 执行敏感操作 */staticasyncexecuteWithAuthT(operation:()PromiseT,authPrompt:()Promiseboolean):PromiseT|null{if(this.needAuth()){constauthenticatedawaitauthPrompt()if(!authenticated){returnnull}this.lastAuthTimeDate.now()}returnawaitoperation()}}五、高级安全功能5.1 安全流程图是否用户数据是否敏感?加密存储普通存储安全区域常规存储5.2 安全区域存储importsecurityfromohos.securityclassSecureStorage{staticasyncsave(key:string,value:string){// 使用安全区域存储敏感数据awaitsecurity.setSecureData({alias:key,data:value})}staticasyncget(key:string):Promisestring{constresultawaitsecurity.getSecureData({alias:key})returnresult.data}}5.3 输入验证classInputValidator{staticvalidateEmail(email:string):boolean{return/^[^\s][^\s]\.[^\s]$/.test(email)}staticvalidatePhone(phone:string):boolean{return/^1[3-9]\d{9}$/.test(phone)}staticsanitize(input:string):string{// 防止XSS攻击returninput.replace(/[]/g,)}}图 1 本地存储六、小结本文详细讲解了安全加固✅ 数据加密✅ 密码哈希✅ 安全存储✅ 网络安全✅ 权限控制✅ 安全区域存储✅ 输入验证系列文章导航下期预告鸿蒙多功能工具箱开发实战(二十八)-应用更新与版本管理

相关新闻

终极指南:三步实现Iwara视频批量下载与智能管理

终极指南:三步实现Iwara视频批量下载与智能管理

终极指南:三步实现Iwara视频批量下载与智能管理 【免费下载链接】IwaraDownloadTool Iwara 下载工具 | Iwara Downloader 项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool 还在为无法离线收藏心爱的动画作品而烦恼吗?是否遇到过网…

2026/11/13 14:38:45 阅读更多 →
LangChain版本冲突避坑指南:一个虚拟环境解决所有问题

LangChain版本冲突避坑指南:一个虚拟环境解决所有问题

【导航台账】制造数据与AI践行者老蒋的技术博客全系列文章汇总(持续更新) 文章摘要 执行pip install langchain0.3.13时,因langgraph等衍生包要求langchain-core>1.4.4,与锁定的0.3.29版本产生致命冲突,导致安装失…

2026/11/10 2:35:38 阅读更多 →
【计算机工具类-CI和CD工具Skills】app-store-changelog 技能

【计算机工具类-CI和CD工具Skills】app-store-changelog 技能

从上次标签以来的git历史生成面向用户的App Store发布说明。 技能概述 app-store-changelog 技能从git历史生成全面的、面向用户的变更日志,然后将提交转换为清晰的App Store发布说明。它自动收集自上次标签以来的更改,分类用户可见的更改,并生成适合App Store"新功能&q…

2026/11/4 14:10:01 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻