Режим по умолчанию Rijndael в .Net имеет размер блока 128 бит - совместимый с AES. Если вы не используете нестандартный размер блока, предпочтите .Net * AesManaged
.
. Вы не указали, какой отступ или режим вы используете. По умолчанию .Net, похоже, CBC, поэтому мы предположим, что. Не ясно, по умолчанию ли это определенный режим заполнения.
(Обратите внимание, что вы используете ключ и в качестве IV, и в качестве ключа. IV должен быть уникальным для каждого вызова процедуры шифрования. TLDR -то, как вы используете AesManaged, небезопасно - не используйте этот код в реальной жизни.)
Кроме того, вы декодируете ключ из строки. Длина ключа AES должна составлять ровно 128 или 256 бит (или один из наиболее необычных). Если вы правильно не выбрали свою строку, вряд ли UTF-8 закодирует точную длину ключа. Кроме того, используя строку, вы используете только байты в ключе, которые оказались символами. Как правило, чтобы использовать строку в качестве пароля, вы должны преобразовать ее в ключ с использованием алгоритма деривации ключа (например, PBKDF2), а не просто в кодировке UTF-8.
С учетом всего сказанного, если ваш пароль точно16 (или длиной 32), и ваш файл является кратным 16 байтам (если это не так, вам нужно решить, как его заполнить), вы сможете расшифровать его так:
import 'dart:convert';
import 'dart:io';
import 'package:pointycastle/export.dart';
main() async {
var key = utf8.encode('abcdefghijklmnop');
var cipher = CBCBlockCipher(AESFastEngine())
..init(false, ParametersWithIV<KeyParameter>(KeyParameter(key), key));
var cipherText = await File('encryptedFile').readAsBytes();
var plainText = cipher.process(cipherText);
await File('decryptedFile').writeAsBytes(plainText, flush: true);
}