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
的概念或usages
在package: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/