使用Flutter API加密读取PEM文件

z9smfwbn  于 2023-11-21  发布在  Flutter
关注(0)|答案(2)|浏览(210)
import 'package:encrypt/encrypt.dart';
import 'package:encrypt/encrypt_io.dart';
import 'dart:io';
import 'package:pointycastle/asymmetric/api.dart';
import 'dart:async';
import 'package:flutter/services.dart' show rootBundle;

class Encrypt {
  Future<String> loadPrivateKey() async {
    return await rootBundle.loadString('assets/private_key.pem');
  }

  Future<String> loadPublicKey() async {
    return await rootBundle.loadString('assets/public_key.pem');
  }

  encryptString() async {
    print(loadPublicKey().toString());
    final publicKey =
        await parseKeyFromFile<RSAPublicKey>('${loadPublicKey()}');
    final privateKey =
        await parseKeyFromFile<RSAPrivateKey>('${loadPrivateKey()}');

    final plainText = 'James Bond';
    final encrypter =
        Encrypter(RSA(publicKey: publicKey, privateKey: privateKey));

    final encrypted = encrypter.encrypt(plainText);
    final decrypted = encrypter.decrypt(encrypted);

    print(decrypted);
    print(encrypted.base64);
  }
}

字符串
错误代码:正在执行热重载.将文件同步到IA Emulator上的设备AOSP.在1,021毫秒内删除了707个库中的8个。I/flutter(7395):'Future'的示例E/flutter(7395):[ERROR:flutter/lib/ui/ui_dart_state.cc(157)]未处理的异常:FileSystemException:无法打开文件,path = 'Future'的示例(操作系统错误:没有这样的文件或目录,errno = 2)
我在yaml文件中添加了资产:

flutter:
  assets:
    - assets/

cetgtptt

cetgtptt1#

parseKeyFromFile是一个方便的函数,它读取文件并解析其内容。你没有文件,你有一个资产,你已经在做阅读成字符串的工作。读取文件后,它只是解析它-这就是你所需要的。
这应该可以:

final publicPem = await rootBundle.loadString('assets/public_key.pem');
final publicKey = RSAKeyParser().parse(publicPem) as RSAPublicKey;

字符串
私钥也是如此。

jpfvwuh4

jpfvwuh42#

我一直在努力,直到我找到了an amazing package

import 'package:crypton/crypton.dart' as crypton;

final publicKey = crypton.RSAPublicKey.fromPEM(pemString);

字符串
我希望这对目前正在尝试这样做的任何人都有效。

相关问题