Flutter椭圆曲线密钥对生成插件flutter_elliptic_curve_keypair的使用

Flutter椭圆曲线密钥对生成插件flutter_elliptic_curve_keypair的使用

该Flutter插件提供了使用椭圆曲线密钥对算法加密数据的功能,并封装了生物特征加密。同时,可以获取公钥用于验证签名。

支持平台

  • Android
  • iOS

功能特性

  • 使用椭圆曲线密钥对算法加密数据。
  • 获取公钥以验证签名(可用于服务器端验证)。
  • 支持阿拉伯语和英语(仅限Android)。

在Dart中使用

添加依赖

在你的pubspec.yaml文件中添加以下依赖:

flutter_elliptic_curve_keypair: ^0.0.6

导入插件

在你的Dart文件中导入插件:

import 'package:flutter_elliptic_curve_keypair/flutter_elliptic_curve_keypair.dart';

加密数据

Future<void> encryptData() async {
  try {
    // 需要加密的数据
    String dataToSign = "data_to_sign";
    // 语言设置(支持英语和阿拉伯语,仅限Android)
    String language = "English";
    // 密钥别名
    String alias = "your_alias_name";

    EccResultModel signedData = await FlutterEllipticCurveKeyPair.ellipticCurveKeyPairSigning(
      message: dataToSign,
      language: language,
      alias: alias,
    );

    if (signedData.success) {
      setState(() {
        signed = "成功,签名数据为 => ${signedData.data}";
      });
    } else {
      setState(() {
        public = "失败,错误信息 => ${signedData.data.toString()}";
      });
    }

  } on PlatformException catch (e) {
    print("发生意外错误 $e");
  }
}

获取公钥

Future<void> ellipticCurveKeyPairPublicKey() async {
  try {
    EccResultModel publicKey = await FlutterEllipticCurveKeyPair.ellipticCurveKeyPairPublicKey();

    if (publicKey.success) {
      setState(() {
        public = "成功,公钥为 => ${publicKey.data}";
      });
    } else {
      setState(() {
        signed = "失败,错误信息 => ${publicKey.data.toString()}";
      });
    }

  } on PlatformException catch (e) {
    print("发生意外错误 $e");
  }
}

Android集成

更新MainActivity.kt

更新MainActivity.kt文件:

// 包名应替换为你的应用包名
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterFragmentActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine)
    }
}

更新应用权限

AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.USE_BIOMETRIC" />

iOS集成

更新info.plist文件

Info.plist文件中添加访问生物特征的权限描述:

<key>NSFaceIDUsageDescription</key>
<string>需要使用Face ID进行身份验证</string>

完整示例代码

example/lib/main.dart

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_elliptic_curve_keypair/flutter_elliptic_curve_keypair.dart';
import 'package:flutter_elliptic_curve_keypair/models/ecc_result_model.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? signed;
  String? public;

  /// 加密或签名数据
  /// 参数 [dataToSign] 是需要加密或签名的数据
  /// [language] 应为 "en" 或 "ar"
  /// [alias] ECC 密钥对别名
  Future<void> ellipticCurveKeyPairSign() async {
    try {
      String dataToSign = "data_to_sign";
      String language = "English";
      String alias = "your_alias_name";

      EccResultModel signedData = await FlutterEllipticCurveKeyPair.ellipticCurveKeyPairSigning(
        message: dataToSign,
        language: language,
        alias: alias,
      );

      if (signedData.success!) {
        setState(() {
          signed = "成功,签名数据为 => ${signedData.data}";
        });
      } else {
        setState(() {
          public = "失败,错误信息 => ${signedData.data.toString()}";
        });
      }
    } on PlatformException catch (e) {
      print("发生意外错误 $e");
    }
  }

  /// 获取公钥
  /// 可用于验证签名数据
  Future<void> ellipticCurveKeyPairPublicKey() async {
    try {
      EccResultModel publicKey = await FlutterEllipticCurveKeyPair.ellipticCurveKeyPairPublicKey();

      if (publicKey.success!) {
        setState(() {
          public = "成功,公钥为 => ${publicKey.data}";
        });
      } else {
        setState(() {
          signed = "失败,错误信息 => ${publicKey.data.toString()}";
        });
      }
    } on PlatformException catch (e) {
      print("发生意外错误 $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('椭圆曲线密钥对示例'),
        ),
        body: Column(
          children: [
            Center(
              child: ElevatedButton(
                child: Text('签名数据'),
                onPressed: () => ellipticCurveKeyPairSign(),
              ),
            ),
            Text(signed != null ? signed! : ""),
            Center(
              child: ElevatedButton(
                child: Text('获取公钥'),
                onPressed: () => ellipticCurveKeyPairPublicKey(),
              ),
            ),
            Text(public != null ? public! : ""),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter椭圆曲线密钥对生成插件flutter_elliptic_curve_keypair的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter椭圆曲线密钥对生成插件flutter_elliptic_curve_keypair的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_elliptic_curve_keypair 是一个用于生成椭圆曲线密钥对的 Flutter 插件。它允许你在 Flutter 应用程序中生成安全的椭圆曲线密钥对,这些密钥对可以用于加密、解密、签名和验证等操作。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 flutter_elliptic_curve_keypair 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_elliptic_curve_keypair: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

使用插件

1. 导入包

在 Dart 文件中导入 flutter_elliptic_curve_keypair 包:

import 'package:flutter_elliptic_curve_keypair/flutter_elliptic_curve_keypair.dart';

2. 生成密钥对

使用 EllipticCurveKeyPair 类来生成密钥对。你可以选择不同的椭圆曲线,例如 secp256k1P-256

void generateKeyPair() async {
  try {
    // 选择椭圆曲线类型
    final keyPair = await EllipticCurveKeyPair.generateKeyPair(
      curve: EllipticCurveType.secp256k1,
    );

    // 获取公钥和私钥
    final publicKey = keyPair.publicKey;
    final privateKey = keyPair.privateKey;

    print('Public Key: $publicKey');
    print('Private Key: $privateKey');
  } catch (e) {
    print('Error generating key pair: $e');
  }
}

3. 使用密钥对

生成密钥对后,你可以将其用于加密、解密、签名和验证等操作。以下是一个简单的示例,展示如何使用密钥对进行签名和验证:

void signAndVerify() async {
  try {
    // 生成密钥对
    final keyPair = await EllipticCurveKeyPair.generateKeyPair(
      curve: EllipticCurveType.secp256k1,
    );

    // 要签名的消息
    final message = 'Hello, Flutter!';

    // 使用私钥签名
    final signature = await EllipticCurveKeyPair.sign(
      privateKey: keyPair.privateKey,
      message: message,
    );

    print('Signature: $signature');

    // 使用公钥验证签名
    final isValid = await EllipticCurveKeyPair.verify(
      publicKey: keyPair.publicKey,
      message: message,
      signature: signature,
    );

    print('Signature is valid: $isValid');
  } catch (e) {
    print('Error signing or verifying: $e');
  }
}
回到顶部