Flutter加密工具插件dart_ecpair的使用

Flutter 加密工具插件 dart_ecpair 的使用

dart_ecpair 是一个用 Dart 编写的用于管理 SECP256k1 密钥对的库。它受到了 bitcoinjs/ecpair 的启发。

添加依赖项

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

dependencies:
  dart_ecpair: ^<最新版本号>

然后运行 dart pub get 来安装该依赖项。

示例代码

以下是一个完整的示例代码,展示了如何使用 dart_ecpair 库生成和管理密钥对。

import 'dart:math';
import 'dart:typed_data';

import 'package:dart_bip32/dart_bip32.dart';
import 'package:dart_ecpair/dart_ecpair.dart';
import 'package:dart_ecpair/src/networks.dart';
import 'package:dart_ecpair/src/utils/random_bytes.dart';

void main() {
  // 从 WIF (Wallet Import Format) 生成密钥对
  final keyPair1 =
      ECPair.fromWIF('KynD8ZKdViVo5W82oyxvE18BbG6nZPVQ8Td8hYbwU94RmyUALUik');
  print(keyPair1.toWIF());
  // 输出: KynD8ZKdViVo5W82oyxvE18BbG6nZPVQ8Td8hYbwU94RmyUALUik

  // 随机生成私钥
  final keyPair2 = ECPair.fromPrivateKey(randomBytes(32));
  print(keyPair2.toWIF());
  // 输出: {随机生成的 WIF}

  // 使用随机数库生成随机密钥对(兼容浏览器)
  final keyPair3 = ECPair.makeRandom();
  print(keyPair3.toWIF());
  // 输出: {随机生成的 WIF}

  // 使用自定义的随机缓冲区生成器
  final random = Random.secure();
  Uint8List customRandomBufferFunc(int size) =>
      Uint8List.fromList(List<int>.generate(size, (i) => random.nextInt(256)));

  final keyPair4 =
      ECPair.makeRandom(ECPairOptions(rng: customRandomBufferFunc));
  print(keyPair4.toWIF());
  // 输出: {随机生成的 WIF}

  // 从公钥生成密钥对
  final keyPair5 = ECPair.fromPublicKey(keyPair1.publicKey);
  print(keyPair5.publicKeyHex);
  // 输出: 03a2529f752ad3986334ecef119600ffced36fc5853447e1b01ac0c30193b92c02

  // 使用自定义网络配置
  final network = Network(
      messagePrefix: '\x19Litecoin Signed Message:\n',
      bip32: Bip32Type(
        public: 0x019da462,
        private: 0x019d9cfe,
      ),
      pubKeyHash: 0x30,
      scriptHash: 0x32,
      wif: 0xb0,
      bech32: ''); // 自定义网络对象

  final networkECPairOptions = ECPairOptions(network: network);

  // 在自定义网络下生成随机密钥对
  ECPair.makeRandom(networkECPairOptions);

  // 使用自定义随机缓冲区生成私钥
  ECPair.fromPrivateKey(customRandomBufferFunc(32), networkECPairOptions);

  // 使用自定义网络下的公钥生成密钥对
  ECPair.fromPublicKey(keyPair1.publicKey, networkECPairOptions);

  // 从 WIF 检查网络版本
  ECPair.fromWIF(
      'cTwJw1TREGFrFLARApkvLrEMNsksgqYWBYNPw6ES1U7yLfeSihjY', networks.testnet);

  // 从多个网络中选择一个合适的网络
  ECPair.fromWIF('T6tT4xL9LAUb16xz5w8MGrF3G5DkqHXHKQMNgNV7rGDX6yxjeSGj',
      [networks.bitcoin, networks.testnet, networks.regtest, network]);
}

更多关于Flutter加密工具插件dart_ecpair的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密工具插件dart_ecpair的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dart_ecpair 是一个用于生成和管理比特币 ECPair(Elliptic Curve Pair)的 Dart 插件。它允许你在 Flutter 应用中生成比特币地址、签名交易以及验证签名。这个插件是基于 bip32bitcoin 库构建的,提供了对椭圆曲线加密的支持。

安装 dart_ecpair

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

dependencies:
  flutter:
    sdk: flutter
  dart_ecpair: ^1.0.0

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

使用 dart_ecpair

以下是一些常见的用法示例:

1. 生成一个新的 ECPair

import 'package:dart_ecpair/dart_ecpair.dart';

void main() {
  // 生成一个新的 ECPair
  final ecPair = ECPair.makeRandom();

  // 获取私钥
  final privateKey = ecPair.privateKey;
  print('Private Key: $privateKey');

  // 获取公钥
  final publicKey = ecPair.publicKey;
  print('Public Key: $publicKey');

  // 获取比特币地址
  final address = ecPair.address;
  print('Bitcoin Address: $address');
}

2. 从私钥生成 ECPair

import 'package:dart_ecpair/dart_ecpair.dart';

void main() {
  // 从私钥生成 ECPair
  final privateKey = 'your_private_key_here';
  final ecPair = ECPair.fromPrivateKey(privateKey);

  // 获取公钥
  final publicKey = ecPair.publicKey;
  print('Public Key: $publicKey');

  // 获取比特币地址
  final address = ecPair.address;
  print('Bitcoin Address: $address');
}

3. 签名和验证消息

import 'package:dart_ecpair/dart_ecpair.dart';

void main() {
  // 生成一个新的 ECPair
  final ecPair = ECPair.makeRandom();

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

  // 签名消息
  final signature = ecPair.sign(message);
  print('Signature: $signature');

  // 验证签名
  final isValid = ecPair.verify(message, signature);
  print('Is Signature Valid? $isValid');
}

注意事项

  • 私钥的安全性:私钥是访问比特币资金的关键,务必妥善保管,不要泄露。
  • 网络选择dart_ecpair 默认生成的是比特币主网的地址。如果你需要生成测试网的地址,可以在生成 ECPair 时指定网络参数。
import 'package:dart_ecpair/dart_ecpair.dart';
import 'package:bitcoin/bitcoin.dart';

void main() {
  // 生成一个测试网的 ECPair
  final ecPair = ECPair.makeRandom(network: testnet);

  // 获取测试网的比特币地址
  final address = ecPair.address;
  print('Testnet Bitcoin Address: $address');
}
回到顶部