Flutter安全存储插件sidekick_vault的使用
Flutter安全存储插件sidekick_vault的使用
sidekick_vault
是一个用于在 Git 仓库中安全存储项目秘密的插件。它使用 GPG 加密来保护敏感信息。
安装插件
安装 sidekick_vault
非常简单。只需在项目中运行以下命令:
<your_cli> sidekick plugins install sidekick_vault
使用 VaultCommand 管理保险库
添加文件到保险库
将文件加密并添加到保险库中:
<cli-name> vault encrypt path/to/secret.csv
你也可以指定密码和保存位置:
<cli-name> vault encrypt --passphrase="****" --vault-location="secret.txt.gpg" path/to/secret.txt
passphrase
是可选的。如果未提供,它将从环境变量中获取或通过stdin
提示输入。vault-location
是可选的。如果未提供,文件将保存在保险库目录中,文件名将作为回退。
解密保险库中的文件
解密保险库中的文件:
<cli-name> vault decrypt secret.csv.gpg
你也可以指定密码和输出路径:
<cli-name> vault decrypt --passphrase="****" --output="write/to/decrypted.txt" secret.txt.gpg
passphrase
是可选的。如果未提供,它将从环境变量中获取或通过stdin
提示输入。output
是可选的。如果未提供,解密后的文件将保存在保险库中,与加密文件同名但没有.gpg
扩展名。
更改保险库密码
更改保险库密码:
<cli-name> vault change-password
你也可以直接传递旧密码和新密码:
<cli-name> vault change-password --old ***** --new *****
old
和new
参数用于传递旧密码和新密码。如果没有提供这些参数,你将通过stdin
输入密码。
手动通过 GPG 添加/读取保险库中的项目
添加文件到保险库
使用 GPG 命令手动将文件添加到保险库:
gpg --symmetric --cipher-algo AES256 --batch --passphrase=$password <file>
从保险库中解密文件
使用 GPG 命令手动从保险库中解密文件:
gpg --quiet --batch --yes --decrypt --passphrase=$password --output=<file> <file.gpg>
在代码中读取秘密
创建一个保险库并读取密码:
import 'package:sidekick_core/sidekick_core.dart';
import 'package:sidekick_vault/sidekick_vault.dart';
void main() {
final vault = SidekickVault(
location: repository.root.directory('vault'),
// 环境变量,CI 可以注入保险库密码
environmentVariableName: 'FLT_VAULT_PASSPHRASE',
);
final secret = vault.loadText('secret.txt');
// 在 CI 中使用 secret 进行魔法操作
print(secret);
}
示例代码
以下是一个完整的示例代码,展示了如何在 Dart 中使用 sidekick_vault
插件:
import 'package:sidekick_core/sidekick_core.dart';
import 'package:sidekick_vault/sidekick_vault.dart';
void main() {
final vault = SidekickVault(
location: SidekickContext.projectRoot.directory('vault'),
// 环境变量,CI 可以注入保险库密码
environmentVariableName: 'FLT_VAULT_PASSPHRASE',
);
// 定义保险库中的加密文件
final EncryptedVaultString encrypted = vault.encryptedString('secret.txt');
// 访问文本时提示输入密码
print(encrypted.text);
// 直接解密(立即提示输入密码)
final secret = vault.loadText('secret.txt');
print(secret);
}
通过以上步骤和示例代码,你可以轻松地在 Flutter 项目中使用 sidekick_vault
插件来安全地存储和管理敏感信息。
更多关于Flutter安全存储插件sidekick_vault的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安全存储插件sidekick_vault的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用sidekick_vault
插件进行安全存储的示例代码。sidekick_vault
是一个用于在Flutter应用中安全存储敏感信息的插件,比如密码、密钥等。
1. 添加依赖
首先,你需要在你的pubspec.yaml
文件中添加sidekick_vault
的依赖:
dependencies:
flutter:
sdk: flutter
sidekick_vault: ^latest_version # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 初始化插件
在你的Flutter应用的入口文件(通常是main.dart
)中,初始化SidekickVault
插件。
import 'package:flutter/material.dart';
import 'package:sidekick_vault/sidekick_vault.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 SidekickVault
await SidekickVault.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
3. 存储和读取数据
接下来,你可以在你的应用中使用SidekickVault
来存储和读取数据。以下是一个简单的示例,展示如何存储和读取一个字符串(比如密码)。
import 'package:flutter/material.dart';
import 'package:sidekick_vault/sidekick_vault.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final String _key = "my_secure_key";
String _password = "";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Sidekick Vault Example"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: "Password"),
obscureText: true,
onChanged: (value) {
setState(() {
_password = value;
});
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// 存储密码
await SidekickVault.save(_key, _password);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Password saved!")),
);
},
child: Text("Save Password"),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// 读取密码
String? retrievedPassword = await SidekickVault.load(_key);
if (retrievedPassword != null) {
setState(() {
_password = retrievedPassword;
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Password retrieved!")),
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Password not found!")),
);
}
},
child: Text("Load Password"),
),
],
),
),
);
}
}
4. 清理数据
你也可以使用SidekickVault.delete
方法来删除存储的数据:
ElevatedButton(
onPressed: () async {
// 删除密码
bool deleted = await SidekickVault.delete(_key);
if (deleted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Password deleted!")),
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Failed to delete password!")),
);
}
},
child: Text("Delete Password"),
),
总结
以上代码展示了如何在Flutter应用中使用sidekick_vault
插件来安全地存储和读取敏感信息。你可以根据需要扩展这个示例,以处理更多的数据类型和复杂的存储需求。