typescript - Dart 中的 Crypto.subtle?

标签 typescript flutter dart cryptography subtlecrypto

Dart 中是否存在与 crypto.subtle 相关的软件包或实用程序? 我发现this但我相信这是只读的,不可访问且仅适用于浏览器。

我正在为 dart 中的这段代码寻找类似的东西

 static async CbcEncrypt(data: Uint8Array, iv: Uint8Array, key: Uint8Array): Promise<Uint8Array> {
    const importedKey = await crypto.subtle.importKey(
      'raw',
      key,
      {
        //this is the algorithm options
        name: 'AES-CBC',
      },
      false, //whether the key is extractable (i.e. can be used in exportKey)
      ['encrypt', 'decrypt'] //can be "encrypt", "decrypt", "wrapKey", or "unwrapKey"
    );

    const cipher = await crypto.subtle.encrypt(
      {
        name: 'AES-CBC',
        iv: iv,
      },
      importedKey, //from generateKey or importKey above
      data //ArrayBuffer of data you want to encrypt
    );

    return new Uint8Array(cipher);
  }

我查看了各种软件包 crypto , webcrypto , cryptography但我无法将任何内容与上面的代码联系起来。

我确实找到了一个包裹pointycastle这看起来很有希望。这个东西可能类似于crypto.subtle吗??

或者 是否可以从 Dart 访问浏览器的 crypto.subtle 对象/API?

最佳答案

简单地说:

import 'package:webcrypto/webcrypto.dart';

Future<List<int>> cbcEncrypt(
  List<int> data,
  List<int> iv,
  List<int> key
) async {
  final key = await AesCbcSecretKey.importRawKey(key);
  final ciphertext = await key.encryptBytes(data, iv);
  return ciphertext;
}

但我也是 package:webcrypto 的作者:D

没有extractable的概念或usagespackage:webcrypto 。如果您需要禁止此类事情,您可以只包装该对象(或者我们将来可能会添加它)。 package:webcrypto 中也没有包装/解开/派生 key 支持,但您可以简单地导出原始 key 并加密/解密或执行 deriveBits并传递派生位以导入原始 key (这与 window.subtle API 的作用相同。


提示: package:webcrypto 中的方法返回字节总是返回 Uint8List 它实现了 List<int> 。只需传递 Uint8List 即可获得稍快的操作速度。但在 Dart 中使用字节的其他 API 会传递 List<int> ,所以package:webcrypto接受它作为输入。

关于typescript - Dart 中的 Crypto.subtle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73390413/

相关文章:

flutter - 如何将文字摆放整齐?

html - 从Flutter网站发布用户和密码

sorting - 如何使用 Dart 对列表进行排序?

flutter - 如何根据 flutter 中的子高度限制可拖动的可滚动表以获取高度?

javascript - 如何在项目的特定子目录上运行 prettier?

javascript - 在 react 中访问全局变量

javascript - 使用 PM2 运行 Typescript 应用程序

javascript - Nest 无法解析 RestController 的依赖关系

ios - 生成 diawi 链接用于 flutter iOS 项目的测试目的

flutter - 了解第 3 方提供的类(实例)结构的一般方法是什么?