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 应用中生成比特币地址、签名交易以及验证签名。这个插件是基于 bip32
和 bitcoin
库构建的,提供了对椭圆曲线加密的支持。
安装 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');
}