Flutter加密或安全服务插件seald_sdk_flutter的使用

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

Flutter加密或安全服务插件seald_sdk_flutter的使用

SealdSDK允许您在Flutter应用程序中使用Seald加密的全部功能。您可以为应用程序的用户创建和检索Seald身份,加密和解密文件,创建加密会话,添加或撤销接收者等。

基本示例

以下是一个基本的示例,展示了如何使用seald_sdk_flutter插件进行加密和解密操作:

import 'package:seald_sdk_flutter/seald_sdk.dart';
import 'dart:convert';

Future<void> main() async {
  final SealdSdk seald = SealdSdk(
    apiURL: 'https://your-api-url.com',
    appId: 'your-app-id',
  );

  // 创建一个Seald身份
  final SealdAccountInfo info = await seald.createAccountAsync('your-jwt-token');

  // 创建加密会话
  final SealdEncryptionSession es = await seald.createEncryptionSessionAsync([info.userId]);

  // 加密文件
  final Uint8List encryptedFile = await es.encryptFileAsync(
    Uint8List.fromList(utf8.encode('Secret file content')),
    'SecretFile.txt',
  );

  // 解密文件
  final Uint8List decryptedFile = await es.decryptFileAsync(encryptedFile);

  print('Original content: ${utf8.decode(decryptedFile)}');
}

安装步骤

iOS安装

为了在iOS上安装此插件,您需要将项目的全局平台设置为至少iOS 13。为此,请编辑您的./ios/Podfile文件,并添加以下行:

platform :ios, '13.0'

注意事项

  • Hot-Reload / Hot-Restart: Seald SDK不兼容Flutter的热重载/热重启功能。如果尝试使用这些功能,可能会遇到DATABASE_LOCKED错误。

  • JWT生成: Seald使用JWT来管理许可证和身份。JWT应由您的后端生成,并在用户注册时发送给用户。JWT的secretId和secret可以从您的管理仪表板生成,并且不应出现在客户端代码中。

完整示例Demo

下面是一个更完整的示例,展示了如何在Flutter应用中集成seald_sdk_flutter插件,包括创建用户、加密和解密文件等功能:

import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart' as path_provider;
import 'package:seald_sdk_flutter/seald_sdk.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Seald SDK Demo')),
        body: Center(child: SealdDemo()),
      ),
    );
  }
}

class SealdDemo extends StatefulWidget {
  [@override](/user/override)
  _SealdDemoState createState() => _SealdDemoState();
}

class _SealdDemoState extends State<SealdDemo> {
  late Future<String> _futureResult;

  [@override](/user/override)
  void initState() {
    super.initState();
    _futureResult = testSealdSdk();
  }

  Future<String> testSealdSdk() async {
    final Directory tmpDir = await path_provider.getApplicationDocumentsDirectory();
    final Directory dbDir = Directory('${tmpDir.path}/seald-test-db');

    if (dbDir.existsSync()) {
      dbDir.deleteSync(recursive: true);
    }

    final SealdSdk sdk = SealdSdk(
      apiURL: 'https://your-api-url.com',
      appId: 'your-app-id',
      databasePath: '${dbDir.path}/sdk1',
      databaseEncryptionKey: Uint8List.fromList(List.filled(64, 0)), // 使用真实的加密密钥
      logLevel: -1,
      instanceName: "Dart-Instance-1",
    );

    final SealdAccountInfo accountInfo = await sdk.createAccountAsync('your-jwt-token');

    final SealdEncryptionSession es = await sdk.createEncryptionSessionAsync([accountInfo.userId]);
    
    final Uint8List encryptedFile = await es.encryptFileAsync(
      Uint8List.fromList(utf8.encode('Hello, Seald!')),
      'test.txt',
    );

    final Uint8List decryptedFile = await es.decryptFileAsync(encryptedFile);

    return utf8.decode(decryptedFile);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return FutureBuilder<String>(
      future: _futureResult,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          if (snapshot.hasError) {
            return Text('Error: ${snapshot.error}');
          } else {
            return Text('Decrypted content: ${snapshot.data}');
          }
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }
}

更多关于Flutter加密或安全服务插件seald_sdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密或安全服务插件seald_sdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 sealed_sdk_flutter 插件进行加密或安全服务的示例代码。请注意,这只是一个基本的示例,实际应用中可能需要根据具体需求进行调整和扩展。

首先,确保你已经在 Flutter 项目中添加了 sealed_sdk_flutter 插件。你可以在你的 pubspec.yaml 文件中添加以下依赖项:

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

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

接下来,是一个简单的示例代码,展示如何使用 sealed_sdk_flutter 插件进行加密操作:

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

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

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

class _MyAppState extends State<MyApp> {
  String encryptedText = '';
  String decryptedText = '';

  @override
  void initState() {
    super.initState();
    // 初始化 SDK,这里假设有一个初始化方法 initSDK()
    // 通常情况下,初始化方法可能会涉及到设置密钥、配置等
    // 这是一个假设的初始化方法,具体实现需要参考 SDK 文档
    _initSDK();
  }

  void _initSDK() async {
    // 假设 SDK 有一个初始化方法,这里简单模拟一下
    // SealedSDK.initialize(yourConfig); // 替换为实际的初始化代码
    // 注意:这里的代码仅为示例,实际使用时请参照 SDK 文档进行初始化
  }

  Future<void> _encryptText(String plainText) async {
    try {
      // 假设 SDK 提供了一个加密方法 encrypt
      String encrypted = await SealedSDK.encrypt(plainText); // 替换为实际的加密方法调用
      setState(() {
        encryptedText = encrypted;
      });
    } catch (e) {
      print('Encryption failed: $e');
    }
  }

  Future<void> _decryptText() async {
    try {
      // 假设 SDK 提供了一个解密方法 decrypt
      String decrypted = await SealedSDK.decrypt(encryptedText); // 替换为实际的解密方法调用
      setState(() {
        decryptedText = decrypted;
      });
    } catch (e) {
      print('Decryption failed: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Sealed SDK Flutter Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextField(
                decoration: InputDecoration(labelText: 'Plain Text'),
                onChanged: (value) {
                  // 这里可以添加一些输入验证或处理逻辑
                },
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () {
                  // 获取 TextField 的值并进行加密
                  // 这里为了简化,假设 TextField 的值已经通过某种方式获取到 plainText 变量中
                  String plainText = 'Hello, Sealed SDK!'; // 替换为实际的输入值获取代码
                  _encryptText(plainText);
                },
                child: Text('Encrypt'),
              ),
              SizedBox(height: 16),
              Text('Encrypted Text: $encryptedText'),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () {
                  _decryptText();
                },
                child: Text('Decrypt'),
              ),
              SizedBox(height: 16),
              Text('Decrypted Text: $decryptedText'),
            ],
          ),
        ),
      ),
    );
  }
}

请注意,上述代码中的 SealedSDK.encryptSealedSDK.decrypt 方法是假设存在的,实际使用时你需要参考 sealed_sdk_flutter 插件的文档来调用正确的加密和解密方法。同时,初始化 SDK 的部分也需要根据插件的实际要求来进行。

此外,由于加密操作通常是异步的,因此上述代码使用了 Futureasync/await 语法来处理异步操作。

希望这个示例能帮助你开始使用 sealed_sdk_flutter 插件进行加密或安全服务。如果有任何进一步的问题,请查阅插件的官方文档或联系插件的开发者获取更多帮助。

回到顶部