You need to enable JavaScript to run this app. 如何将Java实现的RSA-OAEP-SHA256加密代码迁移至Flutter Dart端
优惠活动
大模型
产品
解决方案
定价
更多

如何将Java实现的RSA-OAEP-SHA256加密代码迁移至Flutter Dart端

方案结论

现有Dart生态完全可以实现和你给出的Java加密逻辑完全对齐的跨平台RSA-OAEP加密,纯Dart实现的pointycastle库支持该算法配置,你之前应该是参数配置没有完全匹配Java端的规则。

依赖引入

在pubspec.yaml中添加以下依赖:

  • pointycastle: ^3.7.3
  • convert: ^3.1.1

完整Dart实现代码

import 'dart:convert';
import 'dart:typed_data';
import 'package:pointycastle/pointycastle.dart';
import 'package:pointycastle/asymmetric/api.dart';

String rsaOaepEncrypt(String rawData, String encodedPublicKey) {
  // 对应Java:Base64.decode(encodedPublicKey, Base64.URL_SAFE)
  Uint8List publicKeyBytes = base64Url.decode(encodedPublicKey);

  // 对应Java:解析X509格式公钥
  KeyFactory keyFactory = KeyFactory('RSA');
  X509EncodedKeySpec publicKeySpec = X509EncodedKeySpec(publicKeyBytes);
  RSAPublicKey publicKey = keyFactory.generatePublic(publicKeySpec) as RSAPublicKey;

  // 对应Java:初始化OAEP加密参数,完全匹配Java配置
  OAEPEncoding cipher = OAEPEncoding(
    RSAEngine(),
    Digest('SHA-256'),
    Digest('SHA-256'),
    Uint8List(0),
  );

  // 对应Java:cipher.init(1, keyPublic, paramSpec),true表示加密模式
  cipher.init(
    true,
    PublicKeyParameter<RSAPublicKey>(publicKey),
  );

  // 对应Java:cipher.doFinal(data.getBytes(StandardCharsets.UTF_8))
  Uint8List dataBytes = utf8.encode(rawData);
  Uint8List encryptedBytes = cipher.process(dataBytes);

  // 对应Java:Base64.encodeToString(abData, Base64.URL_SAFE + Base64.NO_WRAP + Base64.NO_PADDING)
  String encryptedBase64 = base64Url.encode(encryptedBytes);
  // 移除末尾的Base64填充符号=,匹配NO_PADDING规则
  encryptedBase64 = encryptedBase64.replaceAll(RegExp(r'='), '');

  return encryptedBase64;
}

注意事项

  • 如果你的公钥字符串带PEM格式的头尾标记(比如-----BEGIN PUBLIC KEY-----、-----END PUBLIC KEY-----)和换行,需要先把这些标记和换行删除之后再传入解码
  • 该实现为纯Dart代码,无需调用原生平台API,可同时运行在Android、iOS、Web全平台
  • 所有参数配置和Java端100%对齐,加密结果和Java端输出完全一致

内容的提问来源于stack exchange,提问作者Adam Levy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 15:15:02