公司动态
鸿蒙三方库 | harmony-utils之EncryptUtil RSA非对称加密详解
前言RSA是非对称加密算法使用公钥加密、私钥解密适用于密钥交换、数字签名等场景。pura/harmony-utils的EncryptUtil封装了RSA加解密方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解帮助开发者快速掌握并应用到实际项目中。一、RSA加解密核心APIEncryptUtil提供了以下RSA方法方法说明返回类型使用场景encryptRSA(data, publicKey)RSA公钥加密string数据加密decryptRSA(data, privateKey)RSA私钥解密string数据解密generateRSAKeyPair()生成RSA密钥对KeyPair密钥生成1.1 核心特性简洁易用封装复杂逻辑为一行调用降低使用门槛类型安全完整的TypeScript类型定义编译期即可发现错误异常处理内置异常捕获机制避免运行时崩溃密钥对生成支持一键生成RSA公私钥对1.2 RSA与AES对比特性RSAAES密钥类型公钥私钥单一密钥速度慢快数据长度有限制无限制适用场景密钥交换数据加密二、完整使用步骤2.1 安装依赖ohpminstallpura/harmony-utils2.2 生成密钥对import{EncryptUtil}frompura/harmony-utils;Button(生成RSA密钥对).width(100%).onClick(async(){try{letkeyPairawaitEncryptUtil.generateRSAKeyPair();this.result公钥:${keyPair.publicKey.substring(0,30)}...\n私钥:${keyPair.privateKey.substring(0,30)}...;}catch(e){this.result异常: e;}})2.3 RSA加密Button(RSA公钥加密).width(100%).onClick(async(){try{letplaintextHello RSA!;letpublicKeyMIIBIjANBg...;letencryptedawaitEncryptUtil.encryptRSA(plaintext,publicKey);this.result原文:${plaintext}\n密文:${encrypted};}catch(e){this.result异常: e;}})三、完整页面示例import{EncryptUtil}frompura/harmony-utils;EntryComponentstruct RSADemo{Stateresult:string;privatepublicKey:string;privateprivateKey:string;build(){Column({space:12}){Button(生成密钥对).width(100%).onClick(async(){letkeyPairawaitEncryptUtil.generateRSAKeyPair();this.publicKeykeyPair.publicKey;this.privateKeykeyPair.privateKey;this.result密钥对已生成;});Button(加密解密).width(100%).onClick(async(){letencryptedawaitEncryptUtil.encryptRSA(Hello,this.publicKey);letdecryptedawaitEncryptUtil.decryptRSA(encrypted,this.privateKey);this.result原文:${decrypted};});Text(this.result).fontSize(14).fontColor(#333333)}.padding(16)}}四、进阶用法4.1 混合加密RSAAESimport{EncryptUtil}frompura/harmony-utils;asyncfunctionhybridEncrypt(data:string,publicKey:string):Promisestring{letaesKeyRandomUtil.randomString(16);letencryptedDataawaitEncryptUtil.encryptAES(data,aesKey);letencryptedKeyawaitEncryptUtil.encryptRSA(aesKey,publicKey);returnJSON.stringify({key:encryptedKey,data:encryptedData});}4.2 数字签名asyncfunctionsignData(data:string,privateKey:string):Promisestring{lethashawaitEncryptUtil.sha256(data);returnawaitEncryptUtil.encryptRSA(hash,privateKey);}五、注意事项数据长度限制RSA加密有数据长度限制通常不超过密钥长度性能问题RSA比AES慢得多不适合加密大量数据密钥安全私钥必须安全存储不能泄露初始化依赖使用前需确保AppUtil.init()已调用混合加密大数据场景建议使用RSAAES混合加密六、常见问题Q1: RSA加密数据长度有限制吗有限制加密数据长度不能超过密钥长度减去填充长度。Q2: 公钥和私钥可以互换使用吗可以公钥加密私钥解密或私钥加密公钥解密用于签名。Q3: RSA密钥长度推荐多少推荐2048位或以上1024位已不安全。Q4: 如何安全存储私钥建议使用AssetUtil或安全存储不要明文存储。总结EncryptUtil的RSA加解密方法为非对称加密提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用RSA实现密钥交换、数字签名等功能。本文基于pura/harmony-utils工具库更多功能请参考官方文档与后续系列文章。