Flutter密钥备份插件at_backupkey_flutter的使用

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

Flutter密钥备份插件at_backupkey_flutter的使用

概述

at_backupkey_flutter 包提供了一种为已注册的 atSign 备份密钥的功能。该开源包用 Dart 编写,支持 Flutter,并遵循 atPlatform 的去中心化、边缘计算模型,具有以下特点:

  • 通过个人数据存储实现对数据访问的加密控制
  • 不需要应用程序后端
  • 端到端加密,只有数据所有者拥有密钥
  • 私有且无监控的连接

更多信息可以查看 atPlatform概述

开始使用

有两种方法开始使用这个包:

1. 从 GitHub 克隆

可以从 GitHub 仓库 中克隆源代码。仓库中的示例代码演示了如何使用此包。

$ git clone https://github.com/atsign-foundation/at_widgets

2. 手动添加包到项目

pub.dev 上可以找到手动添加此包到项目的说明。

工作原理

在 atProtocol 的注册流程中生成 atSign 的密钥。此包帮助将这些密钥添加到 .atKeys 文件中。然后可以将此文件保存到本地文件系统或 iCloud/Gdrive。

设置

Android

AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />

并在 MainActivity 中添加 android:exported="true"

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>

同时,在 app/build.gradle 中设置 Android 版本支持:

compileSdkVersion 29

minSdkVersion 24
targetSdkVersion 29

iOS

Podfile 中添加以下代码:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',
        'PERMISSION_EVENTS=0',
        'PERMISSION_REMINDERS=0',
        'PERMISSION_CONTACTS=0',
        'PERMISSION_MICROPHONE=0',
        'PERMISSION_SPEECH_RECOGNIZER=0',
        'PERMISSION_LOCATION=0',
        'PERMISSION_NOTIFICATIONS=0',
        'PERMISSION_SENSORS=0'
      ]
    end
  end
end

macOS

macOS/Runner/DebugProfile.entitlements(对于发布模式,打开 macOS/Runner/Release.entitlements)中添加以下键:

<key>com.apple.security.files.downloads.read-write</key>
<true/>

示例代码

BackupKeyWidget 图标按钮

BackupKeyWidget(
    atsign: this.atsign,
    atClientService: this.atClientServiceMap[atsign],
),

BackupKeyWidget 对话框

BackupKeyWidget(
    atsign: atsign,
    atClientService: atClientServiceMap[atsign],
).showBackupDialog(context);

以上代码展示了如何在 Flutter 应用中使用 at_backupkey_flutter 包来备份和管理 atSign 密钥。


希望这个整理后的内容对你有所帮助!如果有任何问题,请随时提问。

更多关于Flutter密钥备份插件at_backupkey_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter密钥备份插件at_backupkey_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用at_backupkey_flutter插件的代码示例。这个插件通常用于备份和恢复密钥,这在许多加密和安全相关的应用中非常有用。

首先,你需要在你的pubspec.yaml文件中添加这个插件的依赖:

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

然后运行flutter pub get来获取依赖。

接下来,你可以在你的Flutter应用中导入并使用这个插件。以下是一个简单的示例,展示如何使用at_backupkey_flutter进行密钥备份和恢复:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BackupKeyScreen(),
    );
  }
}

class BackupKeyScreen extends StatefulWidget {
  @override
  _BackupKeyScreenState createState() => _BackupKeyScreenState();
}

class _BackupKeyScreenState extends State<BackupKeyScreen> {
  final BackupKeyManager _backupKeyManager = BackupKeyManager();
  String _backupCode = '';
  String _restoredKey = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Backup Key Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(labelText: 'Backup Code'),
              onChanged: (value) {
                setState(() {
                  _backupCode = value;
                });
              },
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                // 假设这里你已经有了要备份的密钥
                String keyToBackup = 'your-secret-key-here';
                String encryptedBackup = await _backupKeyManager.backupKey(keyToBackup, _backupCode);
                // 通常你会将 encryptedBackup 存储在安全的地方
                print('Encrypted Backup: $encryptedBackup');
              },
              child: Text('Backup Key'),
            ),
            SizedBox(height: 16),
            TextField(
              decoration: InputDecoration(labelText: 'Encrypted Backup'),
              onChanged: (value) async {
                setState(() {
                  String decryptedKey = await _backupKeyManager.restoreKey(value, _backupCode);
                  _restoredKey = decryptedKey;
                });
              },
            ),
            SizedBox(height: 16),
            Text('Restored Key: $_restoredKey'),
          ],
        ),
      ),
    );
  }
}

// 注意:BackupKeyManager 是一个假设的类,实际使用中你应该根据 at_backupkey_flutter 插件的API来实现
class BackupKeyManager {
  Future<String> backupKey(String key, String backupCode) async {
    // 这里应该调用插件的备份功能
    // 返回值是加密后的备份字符串
    return 'encrypted-$key-$backupCode'; // 这是一个模拟的实现
  }

  Future<String> restoreKey(String encryptedBackup, String backupCode) async {
    // 这里应该调用插件的恢复功能
    // 返回值是解密后的原始密钥
    // 假设加密备份的格式是 'encrypted-<key>-<backupCode>'
    List<String> parts = encryptedBackup.split('-');
    if (parts.length == 3 && parts[2] == backupCode) {
      return parts[1]; // 返回解密后的密钥(在这个模拟实现中,它只是原始密钥)
    } else {
      throw Exception('Invalid backup code or encrypted backup format.');
    }
  }
}

注意

  1. 上面的BackupKeyManager类是一个模拟实现,用于展示如何调用备份和恢复功能。在实际使用中,你需要根据at_backupkey_flutter插件的API文档来实现这些方法。
  2. 插件的具体API可能会有所不同,因此请务必参考插件的官方文档来获取最新和最准确的API信息。
  3. 备份和恢复密钥是敏感操作,务必确保在整个过程中采取适当的安全措施。
回到顶部