Flutter加密货币处理插件gainer_crypto的使用

Flutter 加密货币处理插件 gainer_crypto 的使用

概述

gainer_crypto 是一个由 GaiNeR Technologies 开发的用于生成通用加密哈希的 Flutter 插件。它还可以使用一些众所周知的方法对文本或字符串进行加密或解密。

特性

加密学

  • 普通哈希

    • 使用特定方法(如 SHA1、MD5 等)从文本创建哈希字符串。
    • 使用特定方法从文本创建哈希字节。
    • 使用特定方法从文本块创建哈希字符串。
    • 使用特定方法从文本块创建哈希字节。
  • HMAC 哈希

    • 使用特定方法从文本创建 HMAC 哈希字符串。
    • 使用特定方法从文本创建 HMAC 哈希字节。
    • 使用特定方法从文本块创建 HMAC 哈希字符串。
    • 使用特定方法从文本块创建 HMAC 哈希字节。

高级加密学

  • 高级哈希

    • 使用多种方法组合从文本创建哈希字符串。
    • 使用多种方法组合从文本创建哈希字节。
    • 使用一种方法重复多次从文本创建哈希字符串。
    • 使用一种方法重复多次从文本创建哈希字节。
  • 高级 HMAC 哈希

    • 使用多种方法组合从文本创建 HMAC 哈希字符串。
    • 使用多种方法组合从文本创建 HMAC 哈希字节。
    • 使用一种方法重复多次从文本创建 HMAC 哈希字符串。
    • 使用一种方法重复多次从文本创建 HMAC 哈希字节。

密钥生成

用于加密和解密的密钥生成。

IV 生成

用于加密和解密的初始化向量生成。

加密和解密

  • AES
  • Fernet
  • Salsa20
  • RSA
  • RSA 签名和验证

开始使用

要使用常见的加密函数:

import 'package:gainer_crypto/crypto.dart';

要使用高级加密函数:

import 'package:gainer_crypto/crypto_advanced.dart';

要使用加密解密功能或密钥生成:

import 'package:gainer_crypto/encrypt_decrypt.dart';

要使用所有功能:

import 'package:gainer_crypto/gainer_crypto.dart';

使用示例

所有来自此库的函数都以前缀 gr 开头。例如:

grHashString(GRCryptoType type, String input);

这里的 grHashString 是一个函数名。

所有类名和枚举名都以前缀 GR 开头。例如:

GRKey key = grKeyFromUtf8("32 Length Key...");
GRIV iv = grIVFromLength(16);
GRCryptoType hashType = GRCryptoType.md5;
GRCryptoTypeHMAC hmacHashType = GRCryptoTypeHMAC.hmacSHA1;

这里,

  • GRKeyGRIV 是类。
  • GRCryptoTypeGRCryptoTypeHMAC 是枚举。
  • grKeyFromUtf8grIVFromLength 是函数。

哈希

我们可以使用特定的方法(如 SHA1、MD5 等)加密输入文本。生成的哈希不能被解密。例如:

final sha1Hash = grHashString(GRCryptoType.sha1, "inputText");

这里你可以看到函数 grHashString 接受两个参数:

  • hashType: 特定的哈希方法,应该是 GRCryptoType 类型。
  • input: 要加密的字符串输入。

该函数会将输入字符串转换为 sha1 哈希,因为 hashType 提供了 GRCryptoType.sha1

支持的 GRCryptoType 枚举值包括:

sha1
sha224
sha256
sha384
sha512
sha512_224
sha512_256
md5
md2
md4
ripemd128
ripemd160
ripemd256
ripemd320
sha3_224
sha3_256
sha3_384
sha3_512
keccak224
keccak256
keccak384
keccak512
tiger
whirlpool
sm3

更多哈希示例可以在 示例 标签页中找到。

HMAC

我们可以使用特定的方法(如 SHA1、MD5 等)和一个密钥加密输入文本。使用密钥生成哈希称为 HMAC。生成的哈希不能被解密。例如:

const input = "inputText";
const key = "Password";
final md5Hash = grHMACHashString(GRCryptoTypeHMAC.hmacMD5, input, key);

这里你可以看到函数 grHMACHashString 接受三个参数:

  • hashType: 特定的哈希方法,应该是 GRCryptoTypeHMAC 类型。
  • input: 要加密的字符串输入。
  • key: 用于额外安全性的字符串密钥。

该函数会将输入字符串转换为 md5 哈希,因为 hashType 提供了 GRCryptoTypeHMAC.hmacMD5

支持的 GRCryptoTypeHMAC 枚举值包括:

hmacSHA1
hmacSHA224
hmacSHA256
hmacSHA384
hmacSHA512
hmacSHA512_224
hmacSHA512_256
hmacMD5

更多 HMAC 哈希示例可以在 示例 标签页中找到。

高级哈希

在高级部分,我们可以使用不同的方法或同一种方法多次加密一个输入字符串。生成的哈希不能被解密。现在,看以下示例:

const inputText = "Hello GaiNeR";
final listCryptoTypes = [GRCryptoType.sha1, GRCryptoType.md5];
final hashString = grAdvHashString(listCryptoTypes, inputText);
print(hashString);

这里你可以看到我们传递两个参数给函数 grAdvHashString

  • hashTypes: 应该是 GRCryptoType 列表。
  • input: 要加密的字符串输入。

该函数会将输入字符串两次加密,第一次用 sha1 方法,第二次用 md5 方法,因为 hashTypes 提供了 GRCryptoType.sha1GRCryptoType.md5

你可以在列表中提供任意数量的 GRCryptoType。如果提供空列表,则输出将是空白字符串。

final sha1HashWR = grHashStringWR(GRCryptoType.sha1, 3, inputText);
print(sha1HashWR);

这里你可以看到我们传递两个参数给函数 grHashStringWR

  • hashType: 特定的哈希方法,应该是 GRCryptoType 类型。
  • repeat: 一个整数,表示重复次数。
  • input: 要加密的字符串输入。

首先,该函数会将输入字符串转换为 sha1 哈希,因为 hashType 提供了 GRCryptoType.sha1

然后输出会再次加密 sha1 三次,因为重复计数为 3。

如果重复计数为 0,则只会加密一次且不会重复。所以,

final sha1HashWR = grHashStringWR(GRCryptoType.sha1, 0, inputText);

等同于

final sha1Hash = grHashString(GRCryptoType.sha1, inputText);

如果重复计数为负数,则输出将是空白字符串。

// Note: WR in grHashStringWR stands for With Repeat

更多高级哈希示例可以在 示例 标签页中找到。

高级 HMAC

在高级 HMAC 部分,我们可以使用不同的方法或同一种方法多次加密一个输入字符串。由于这是 HMAC,我们需要一个额外的密钥用于加密。生成的哈希不能被解密。现在,看以下示例:

const inputText = "Hello GaiNeR";
const key = "Password";
final listCryptoTypes = [GRCryptoTypeHMAC.hmacSHA1, GRCryptoTypeHMAC.hmacMD5];
final hashString = grAdvHMACHashString(listCryptoTypes, inputText, key);
print(hashString);

这里你可以看到我们传递三个参数给函数 grAdvHMACHashString

  • hashTypes: 应该是 GRCryptoTypeHMAC 列表。
  • input: 要加密的字符串输入。
  • key: 用于额外安全性的字符串密钥。

该函数会将输入字符串两次加密,第一次用 hmacSHA1 方法,第二次用 hmacSHA1 哈希到 hmacMD5 方法,因为 hashTypes 提供了 GRCryptoTypeHMAC.hmacSHA1GRCryptoTypeHMAC.hmacMD5

你可以在列表中提供任意数量的 GRCryptoTypeHMAC。如果提供空列表,则输出将是空白字符串。

final sha1HashWR = grHMACHashStringWR(GRCryptoTypeHMAC.hmacSHA1, 3, inputText, key);
print(sha1HashWR);

这里你可以看到我们传递两个参数给函数 grHMACHashStringWR

  • hashType: 特定的哈希方法,应该是 GRCryptoTypeHMAC 类型。
  • repeat: 一个整数,表示重复次数。
  • input: 要加密的字符串输入。
  • key: 用于额外安全性的字符串密钥。

首先,该函数会将输入字符串转换为 hmacSHA1 哈希,因为 hashType 提供了 GRCryptoTypeHMAC.hmacSHA1

然后输出会再次加密 hmacSHA1 三次,因为重复计数为 3。

如果重复计数为 0,则只会加密一次且不会重复。所以,

final sha1HashWR = grHMACHashStringWR(GRCryptoTypeHMAC.hmacSHA1, 0, inputText, key);

等同于

final sha1Hash = grHMACHashString(GRCryptoTypeHMAC.hmacSHA1, inputText, key);

如果重复计数为负数,则输出将是空白字符串。

// Note: WR in grHashStringWR stands for With Repeat

更多高级 HMAC 哈希示例可以在 示例 标签页中找到。

密钥生成

你可以生成 GRKey 类型的密钥用于加密和解密。一个例子:

GRKey key = grKeyFromBase16("<Base16 String>");

更多密钥生成示例可以在 示例 标签页中找到。

初始化向量生成

你可以生成 GRIV 类型的初始化向量用于加密和解密。一个例子:

GRIV iv = grIVFromUtf8("My Iv");

更多初始化向量生成示例可以在 示例 标签页中找到。

加密和解密

AES

在这个方法中,你可以使用密钥加密或解密输入字符串。

  • 加密 你可以使用:

    1. Base16 加密函数
    String grEncrypt16AES(
      {required String input,
      required GRKey key,
      GRIV? iv,
      GRAESMode mode = GRAESMode.sic,
      GRPadding padding = GRPadding.pkcs7,
      int repeat = 0});
    

    这个函数返回一个十六进制或 Base16 字符串。

    1. Base64 加密函数
    String grEncrypt64AES(
      {required String input,
      required GRKey key,
      GRIV? iv,
      GRAESMode mode = GRAESMode.sic,
      GRPadding padding = GRPadding.pkcs7,
      int repeat = 0});
    

    这个函数返回一个 Base64 字符串。

  • 解密 你可以使用:

    1. Base16 解密函数
    dynamic grDecrypt16AES(
      {required String inputBase16,
      required GRKey key,
      GRIV? iv,
      GRAESMode mode = GRAESMode.sic,
      GRPadding padding = GRPadding.pkcs7,
      int repeat = 0});
    

    输入应该是十六进制或 Base16 字符串,并返回一个 UTF-8 字符串。

    1. Base64 解密函数
    dynamic grDecrypt64AES(
      {required String inputBase64,
      required GRKey key,
      GRIV? iv,
      GRAESMode mode = GRAESMode.sic,
      GRPadding padding = GRPadding.pkcs7,
      int repeat = 0});
    

    输入应该是 Base64 字符串,并返回一个 UTF-8 字符串。

对于 AES,在所有函数中只有两个参数是必需的:inputkey。其余的是可选的。

GRAESMode 支持的值包括:

cbc
cfb64
ctr
ecb
ofb64Gctr
ofb64
sic

默认值为 GRAESMode.sic

GRPadding 支持的填充值包括:

pkcs7
none

默认值为 GRPadding.pkcs7

更多 AES 示例可以在 示例 标签页中找到。

在示例中只展示了 Base64 加密和解密。类似地,你可以为 Base16 做同样的事情。

Fernet

在这个方法中,你可以使用密钥加密或解密输入字符串。

  • 加密 你可以使用:

    1. Base16 加密函数
    String grEncrypt16Fernet({required String input, required GRKey key, GRIV? iv, int repeat = 0});
    

    这个函数返回一个十六进制或 Base16 字符串。

    1. Base64 加密函数
    String grEncrypt64Fernet({required String input, required GRKey key, GRIV? iv, int repeat = 0});
    

    这个函数返回一个 Base64 字符串。

  • 解密 你可以使用:

    1. Base16 解密函数
    String grDecrypt16Fernet(
      {required String inputBase16,
      required GRKey key,
      GRIV? iv,
      int repeat = 0});
    

    输入应该是十六进制或 Base16 字符串,并返回一个 UTF-8 字符串。

    1. Base64 解密函数
    String grDecrypt64Fernet(
      {required String inputBase64,
      required GRKey key,
      GRIV? iv,
      int repeat = 0});
    

    输入应该是 Base64 字符串,并返回一个 UTF-8 字符串。

对于 Fernet,在所有函数中只有两个参数是必需的:inputkey。其余的是可选的。

更多 Fernet 示例可以在 示例 标签页中找到。

在示例中只展示了 Base64 加密和解密。类似地,你可以为 Base16 做同样的事情。

Salsa20

在这个方法中,你可以使用密钥加密或解密输入字符串。

  • 加密 你可以使用:

    1. Base16 加密函数
    String grEncrypt16Salsa20({required String input, required GRKey key, GRIV? iv, int repeat = 0});
    

    这个函数返回一个十六进制或 Base16 字符串。

    1. Base64 加密函数
    String grEncrypt64Salsa20({required String input, required GRKey key, GRIV? iv, int repeat = 0});
    

    这个函数返回一个 Base64 字符串。

  • 解密 你可以使用:

    1. Base16 解密函数
    String grDecrypt16Salsa20(
      {required String inputBase16,
      required GRKey key,
      GRIV? iv,
      int repeat = 0});
    

    输入应该是十六进制或 Base16 字符串,并返回一个 UTF-8 字符串。

    1. Base64 解密函数
    String grDecrypt64Salsa20(
      {required String inputBase64,
      required GRKey key,
      GRIV? iv,
      int repeat = 0});
    

    输入应该是 Base64 字符串,并返回一个 UTF-8 字符串。

对于 Salsa20,在所有函数中只有两个参数是必需的:inputkey。其余的是可选的。

更多 Salsa20 示例可以在 示例 标签页中找到。

在示例中只展示了 Base64 加密和解密。类似地,你可以为 Base16 做同样的事情。

RSA

在这个方法中,你可以使用公钥和私钥加密或解密输入字符串。

  • 加密 你可以使用:

    1. Base16 加密函数
    Future<String> grEncrypt16RSA(
      {required String input,
      required String publicKeyPath,
      required String privateKeyPath,
      GREncodingRSA encoding = GREncodingRSA.PKCS1,
      int repeat = 0});
    

    这个函数返回一个十六进制或 Base16 字符串。

    1. Base64 加密函数
    Future<String> grEncrypt64RSA(
      {required String input,
      required String publicKeyPath,
      required String privateKeyPath,
      GREncodingRSA encoding = GREncodingRSA.PKCS1,
      int repeat = 0});
    

    这个函数返回一个 Base64 字符串。

  • 解密 你可以使用:

    1. Base16 解密函数
    Future<String> grDecrypt16RSA(
      {required String inputBase16,
      required String publicKeyPath,
      required String privateKeyPath,
      GREncodingRSA encoding = GREncodingRSA.PKCS1,
      int repeat = 0});
    

    输入应该是十六进制或 Base16 字符串,并返回一个 UTF-8 字符串。

    1. Base64 解密函数
    Future<String> grDecrypt64RSA(
      {required String inputBase64,
      required String publicKeyPath,
      required String privateKeyPath,
      GREncodingRSA encoding = GREncodingRSA.PKCS1,
      int repeat = 0});
    

    输入应该是 Base64 字符串,并返回一个 UTF-8 字符串。

对于 RSA,在所有函数中三个参数是必需的:inputpublicKeyPathprivateKeyPath。你需要提供密钥的路径而不是直接的密钥字符串。

GREncodingRSA 支持的值包括:

PKCS1
OAEP

默认值为 GREncodingRSA.PKCS1

更多 RSA 示例可以在 示例 标签页中找到。

在示例中只展示了 Base64 加密和解密。类似地,你可以为 Base16 做同样的事情。

签名验证

我们仅支持 SHA-256 RSA 签名和验证。

RSA 签名和验证
  • 签名 你可以使用:

    1. Base16 签名函数
    Future<String> grSign16RSA(
      {required String input,
      required String publicKeyPath,
      required String privateKeyPath});
    

    这个函数返回一个十六进制或 Base16 字符串。

    1. Base64 签名函数
    Future<String> grSign64RSA(
      {required String input,
      required String publicKeyPath,
      required String privateKeyPath});
    

    这个函数返回一个 Base64 字符串。

  • 验证 你可以使用:

    1. Base16 验证函数
    Future<bool> grVerify16RSA(
      {required String input,
      required String signatureBase16,
      required String publicKeyPath,
      required String privateKeyPath});
    

    输入应该是十六进制或 Base16 字符串,并返回一个布尔值,成功时为 true

    1. Base64 验证函数
    Future<bool> grVerify64RSA(
      {required String input,
      required String signatureBase64,
      required String publicKeyPath,
      required String privateKeyPath});
    

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

1 回复

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


当然,以下是如何在Flutter项目中使用gainer_crypto插件来处理加密货币数据的示例代码。请注意,这个插件的具体功能可能会随着版本更新而变化,因此请查阅最新的官方文档以获取最准确的信息。

首先,确保你已经在pubspec.yaml文件中添加了gainer_crypto依赖:

dependencies:
  flutter:
    sdk: flutter
  gainer_crypto: ^最新版本号  # 请替换为实际最新版本号

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

接下来是一个简单的示例,展示如何使用gainer_crypto插件来获取加密货币的数据:

import 'package:flutter/material.dart';
import 'package:gainer_crypto/gainer_crypto.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? cryptoData;

  @override
  void initState() {
    super.initState();
    _fetchCryptoData();
  }

  Future<void> _fetchCryptoData() async {
    // 初始化GainerCrypto实例
    final gainerCrypto = GainerCrypto();

    try {
      // 获取加密货币数据,例如比特币的数据
      final cryptoResult = await gainerCrypto.getCryptoData('BTC');
      
      // 处理数据并更新UI
      setState(() {
        cryptoData = cryptoResult.toString();
      });
    } catch (e) {
      // 处理错误
      setState(() {
        cryptoData = 'Error: ${e.message}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GainerCrypto Demo'),
        ),
        body: Center(
          child: Text(cryptoData ?? 'Loading...'),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了gainer_crypto依赖。
  2. MyApp组件的initState方法中调用_fetchCryptoData函数来获取加密货币数据。
  3. 使用GainerCrypto类的getCryptoData方法来获取特定加密货币(例如BTC)的数据。
  4. 将获取到的数据存储在cryptoData变量中,并在UI中显示。

请注意,gainer_crypto插件的实际API可能会有所不同,特别是getCryptoData方法的参数和返回值。因此,请务必参考插件的官方文档以了解如何正确使用它。如果插件提供了更多功能,例如获取历史数据、多个货币的数据等,你可以根据文档扩展上述示例代码。

回到顶部