前言

RSA是非对称加密算法,使用公钥加密、私钥解密,适用于密钥交换、数字签名等场景。@pura/harmony-utilsEncryptUtil 封装了RSA加解密方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

在这里插入图片描述

一、RSA加解密核心API

EncryptUtil 提供了以下RSA方法:

方法 说明 返回类型 使用场景
encryptRSA(data, publicKey) RSA公钥加密 string 数据加密
decryptRSA(data, privateKey) RSA私钥解密 string 数据解密
generateRSAKeyPair() 生成RSA密钥对 KeyPair 密钥生成

1.1 核心特性

  • 简洁易用:封装复杂逻辑为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 密钥对生成:支持一键生成RSA公私钥对

1.2 RSA与AES对比

特性 RSA AES
密钥类型 公钥+私钥 单一密钥
速度
数据长度 有限制 无限制
适用场景 密钥交换 数据加密

二、完整使用步骤

2.1 安装依赖

ohpm install @pura/harmony-utils

2.2 生成密钥对

import { EncryptUtil } from '@pura/harmony-utils';

Button('生成RSA密钥对')
  .width('100%')
  .onClick(async () => {
    try {
      let keyPair = await EncryptUtil.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 {
      let plaintext = 'Hello RSA!';
      let publicKey = 'MIIBIjANBg...';
      let encrypted = await EncryptUtil.encryptRSA(plaintext, publicKey);
      this.result = `原文: ${plaintext}\n密文: ${encrypted}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

在这里插入图片描述

三、完整页面示例

import { EncryptUtil } from '@pura/harmony-utils';

@Entry
@Component
struct RSADemo {
  @State result: string = '';
  private publicKey: string = '';
  private privateKey: string = '';

  build() {
    Column({ space: 12 }) {
      Button('生成密钥对').width('100%').onClick(async () => {
        let keyPair = await EncryptUtil.generateRSAKeyPair();
        this.publicKey = keyPair.publicKey;
        this.privateKey = keyPair.privateKey;
        this.result = '密钥对已生成';
      });
      Button('加密解密').width('100%').onClick(async () => {
        let encrypted = await EncryptUtil.encryptRSA('Hello', this.publicKey);
        let decrypted = await EncryptUtil.decryptRSA(encrypted, this.privateKey);
        this.result = `原文: ${decrypted}`;
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 混合加密(RSA+AES)

import { EncryptUtil } from '@pura/harmony-utils';

async function hybridEncrypt(data: string, publicKey: string): Promise<string> {
  let aesKey = RandomUtil.randomString(16);
  let encryptedData = await EncryptUtil.encryptAES(data, aesKey);
  let encryptedKey = await EncryptUtil.encryptRSA(aesKey, publicKey);
  return JSON.stringify({ key: encryptedKey, data: encryptedData });
}

4.2 数字签名

async function signData(data: string, privateKey: string): Promise<string> {
  let hash = await EncryptUtil.sha256(data);
  return await EncryptUtil.encryptRSA(hash, privateKey);
}

五、注意事项

  1. 数据长度限制:RSA加密有数据长度限制,通常不超过密钥长度
  2. 性能问题:RSA比AES慢得多,不适合加密大量数据
  3. 密钥安全:私钥必须安全存储,不能泄露
  4. 初始化依赖:使用前需确保 AppUtil.init() 已调用
  5. 混合加密:大数据场景建议使用RSA+AES混合加密

六、常见问题

Q1: RSA加密数据长度有限制吗?

有限制,加密数据长度不能超过密钥长度减去填充长度。

Q2: 公钥和私钥可以互换使用吗?

可以,公钥加密私钥解密,或私钥加密公钥解密(用于签名)。

Q3: RSA密钥长度推荐多少?

推荐2048位或以上,1024位已不安全。

Q4: 如何安全存储私钥?

建议使用AssetUtil或安全存储,不要明文存储。

在这里插入图片描述
在这里插入图片描述

总结

EncryptUtil 的RSA加解密方法为非对称加密提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用RSA实现密钥交换、数字签名等功能。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐