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;
这里,
GRKey
和GRIV
是类。GRCryptoType
和GRCryptoTypeHMAC
是枚举。grKeyFromUtf8
和grIVFromLength
是函数。
哈希
我们可以使用特定的方法(如 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.sha1
和 GRCryptoType.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.hmacSHA1
和 GRCryptoTypeHMAC.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
在这个方法中,你可以使用密钥加密或解密输入字符串。
-
加密 你可以使用:
- Base16 加密函数
String grEncrypt16AES( {required String input, required GRKey key, GRIV? iv, GRAESMode mode = GRAESMode.sic, GRPadding padding = GRPadding.pkcs7, int repeat = 0});
这个函数返回一个十六进制或 Base16 字符串。
- Base64 加密函数
String grEncrypt64AES( {required String input, required GRKey key, GRIV? iv, GRAESMode mode = GRAESMode.sic, GRPadding padding = GRPadding.pkcs7, int repeat = 0});
这个函数返回一个 Base64 字符串。
-
解密 你可以使用:
- 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 字符串。
- 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,在所有函数中只有两个参数是必需的:input
和 key
。其余的是可选的。
GRAESMode
支持的值包括:
cbc
cfb64
ctr
ecb
ofb64Gctr
ofb64
sic
默认值为 GRAESMode.sic
。
GRPadding
支持的填充值包括:
pkcs7
none
默认值为 GRPadding.pkcs7
。
更多 AES 示例可以在 示例 标签页中找到。
在示例中只展示了 Base64 加密和解密。类似地,你可以为 Base16 做同样的事情。
Fernet
在这个方法中,你可以使用密钥加密或解密输入字符串。
-
加密 你可以使用:
- Base16 加密函数
String grEncrypt16Fernet({required String input, required GRKey key, GRIV? iv, int repeat = 0});
这个函数返回一个十六进制或 Base16 字符串。
- Base64 加密函数
String grEncrypt64Fernet({required String input, required GRKey key, GRIV? iv, int repeat = 0});
这个函数返回一个 Base64 字符串。
-
解密 你可以使用:
- Base16 解密函数
String grDecrypt16Fernet( {required String inputBase16, required GRKey key, GRIV? iv, int repeat = 0});
输入应该是十六进制或 Base16 字符串,并返回一个 UTF-8 字符串。
- Base64 解密函数
String grDecrypt64Fernet( {required String inputBase64, required GRKey key, GRIV? iv, int repeat = 0});
输入应该是 Base64 字符串,并返回一个 UTF-8 字符串。
对于 Fernet,在所有函数中只有两个参数是必需的:input
和 key
。其余的是可选的。
更多 Fernet 示例可以在 示例 标签页中找到。
在示例中只展示了 Base64 加密和解密。类似地,你可以为 Base16 做同样的事情。
Salsa20
在这个方法中,你可以使用密钥加密或解密输入字符串。
-
加密 你可以使用:
- Base16 加密函数
String grEncrypt16Salsa20({required String input, required GRKey key, GRIV? iv, int repeat = 0});
这个函数返回一个十六进制或 Base16 字符串。
- Base64 加密函数
String grEncrypt64Salsa20({required String input, required GRKey key, GRIV? iv, int repeat = 0});
这个函数返回一个 Base64 字符串。
-
解密 你可以使用:
- Base16 解密函数
String grDecrypt16Salsa20( {required String inputBase16, required GRKey key, GRIV? iv, int repeat = 0});
输入应该是十六进制或 Base16 字符串,并返回一个 UTF-8 字符串。
- Base64 解密函数
String grDecrypt64Salsa20( {required String inputBase64, required GRKey key, GRIV? iv, int repeat = 0});
输入应该是 Base64 字符串,并返回一个 UTF-8 字符串。
对于 Salsa20,在所有函数中只有两个参数是必需的:input
和 key
。其余的是可选的。
更多 Salsa20 示例可以在 示例 标签页中找到。
在示例中只展示了 Base64 加密和解密。类似地,你可以为 Base16 做同样的事情。
RSA
在这个方法中,你可以使用公钥和私钥加密或解密输入字符串。
-
加密 你可以使用:
- Base16 加密函数
Future<String> grEncrypt16RSA( {required String input, required String publicKeyPath, required String privateKeyPath, GREncodingRSA encoding = GREncodingRSA.PKCS1, int repeat = 0});
这个函数返回一个十六进制或 Base16 字符串。
- Base64 加密函数
Future<String> grEncrypt64RSA( {required String input, required String publicKeyPath, required String privateKeyPath, GREncodingRSA encoding = GREncodingRSA.PKCS1, int repeat = 0});
这个函数返回一个 Base64 字符串。
-
解密 你可以使用:
- Base16 解密函数
Future<String> grDecrypt16RSA( {required String inputBase16, required String publicKeyPath, required String privateKeyPath, GREncodingRSA encoding = GREncodingRSA.PKCS1, int repeat = 0});
输入应该是十六进制或 Base16 字符串,并返回一个 UTF-8 字符串。
- Base64 解密函数
Future<String> grDecrypt64RSA( {required String inputBase64, required String publicKeyPath, required String privateKeyPath, GREncodingRSA encoding = GREncodingRSA.PKCS1, int repeat = 0});
输入应该是 Base64 字符串,并返回一个 UTF-8 字符串。
对于 RSA,在所有函数中三个参数是必需的:input
、publicKeyPath
和 privateKeyPath
。你需要提供密钥的路径而不是直接的密钥字符串。
GREncodingRSA
支持的值包括:
PKCS1
OAEP
默认值为 GREncodingRSA.PKCS1
。
更多 RSA 示例可以在 示例 标签页中找到。
在示例中只展示了 Base64 加密和解密。类似地,你可以为 Base16 做同样的事情。
签名验证
我们仅支持 SHA-256 RSA 签名和验证。
RSA 签名和验证
-
签名 你可以使用:
- Base16 签名函数
Future<String> grSign16RSA( {required String input, required String publicKeyPath, required String privateKeyPath});
这个函数返回一个十六进制或 Base16 字符串。
- Base64 签名函数
Future<String> grSign64RSA( {required String input, required String publicKeyPath, required String privateKeyPath});
这个函数返回一个 Base64 字符串。
-
验证 你可以使用:
- Base16 验证函数
Future<bool> grVerify16RSA( {required String input, required String signatureBase16, required String publicKeyPath, required String privateKeyPath});
输入应该是十六进制或 Base16 字符串,并返回一个布尔值,成功时为
true
。- 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
更多关于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...'),
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 在
pubspec.yaml
文件中添加了gainer_crypto
依赖。 - 在
MyApp
组件的initState
方法中调用_fetchCryptoData
函数来获取加密货币数据。 - 使用
GainerCrypto
类的getCryptoData
方法来获取特定加密货币(例如BTC)的数据。 - 将获取到的数据存储在
cryptoData
变量中,并在UI中显示。
请注意,gainer_crypto
插件的实际API可能会有所不同,特别是getCryptoData
方法的参数和返回值。因此,请务必参考插件的官方文档以了解如何正确使用它。如果插件提供了更多功能,例如获取历史数据、多个货币的数据等,你可以根据文档扩展上述示例代码。