Flutter安全存储插件sidekick_vault的使用

发布于 1周前 作者 nodeper 来自 Flutter

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 *****
  • oldnew 参数用于传递旧密码和新密码。如果没有提供这些参数,你将通过 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

1 回复

更多关于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插件来安全地存储和读取敏感信息。你可以根据需要扩展这个示例,以处理更多的数据类型和复杂的存储需求。

回到顶部