微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Flutter 中验证 Hive secureBox 的加密

如何解决在 Flutter 中验证 Hive secureBox 的加密

对于许多有经验的开发人员来说,这可能是一个愚蠢而多余的问题,但是我没有经验,所以我提出了这个问题。我想访问此框中的加密值,以直观、手动验证并观察加密是否已完成。好像不能打印加密值,只有解密值出来了。

我正在使用一些演示代码测试 this 示例。

我是不是做错了什么,还是 .get() 方法认在调用时解密?

import 'dart:convert';
import 'package:Flutter/cupertino.dart';
import 'package:hive/hive.dart';
import 'package:Flutter_secure_storage/Flutter_secure_storage.dart';
import 'package:hive_Flutter/hive_Flutter.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Hive.initFlutter();

  String key = 'key';
  String secret = 'secret value';

  final FlutterSecureStorage secureStorage = const FlutterSecureStorage();
  var containsEncryptionKey = await secureStorage.containsKey(key: 'key');
  if (!containsEncryptionKey) {
    var key = Hive.generateSecureKey();
    await secureStorage.write(key: 'key',value: base64UrlEncode(key));
  }

  print(await secureStorage.readAll());

  var encryptionKey = base64Url.decode(await secureStorage.read(key: 'key'));
  print('Encryption key: $encryptionKey');

  var encryptedBox = await Hive.openBox('secure_Box',encryptionCipher: HiveAesCipher(encryptionKey));
  encryptedBox.put(key,secret);

  print(Hive.Box('secure_Box').values);     // Should this not be encrypted text?
  print(encryptedBox.get(key));
}

输出

Flutter: {key: Wr1fM3XHtIefLX8JKGJfPNiHdaWiNZspbml6NJeJkTk=}
Flutter: Encryption key: [90,189,95,51,117,199,180,135,159,45,127,9,40,98,60,216,165,162,53,155,41,110,105,122,52,151,137,145,57]
Flutter: (secret value,secret_value)
Flutter: secret_value

解决方法

因为当你调用 Hive.box('secure_box').values
它实际上返回一个先前打开的框,又名 encryptedBoxHiveAesCipher(encryptionKey) ,这就是为什么您可以看到正确的值
您可以在此处参考源代码说明https://github.com/hivedb/hive/blob/59ad5403593283233d922f62f76832c64fa33a3b/hive/lib/src/hive.dart#L39

/// Returns a previously opened box.
  Box<E> box<E>(String name);

To open an existing box,you need to provide the key you used to create it
您可以在 Encrypted box - Why store the encryption key? https://github.com/hivedb/hive/issues/556#issuecomment-770458818
中参考 Hive 团队的评论 因此,如果您使用正确的 HiveAesCipher(encryptionKey)

打开框,您将始终获得正确的纯文本值

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。