Шифрование двоичного массива с помощью AES ECB в Dart - PullRequest
0 голосов
/ 20 февраля 2019

Я ищу способ шифрования двоичного массива в Dart.Я рассмотрел некоторые из наиболее распространенных библиотек, таких как https://pub.dartlang.org/packages/encrypt,, но многие из них могут обрабатывать только ключи AES и данные в строковой форме, а не двоичные массивы.

Я также взглянул на https://github.com/PointyCastle/pointycastle, который, кажется, способен обрабатывать ключи и данные AES в двоичных массивах, но я не могу понять, как правильно его использовать.Двоичный массив, содержащий данные, всегда имеет ту же длину, что и ключ, поэтому ему не нужно добавлять отступы.

Пока мой код:

class Encr {
    static List<int> encrCmd(List<int> inputData, List<int> aesKey) {

        Uint8List keyList = Uint8List.fromList(aesKey);
        Uint8List dataList = Uint8List.fromList(inputData);

        CipherParameters cip = new PaddedBlockCipherParameters(newKeyParameter(keylist), null);
        BlockCipher cipherImpl = new BlockCipher("AES/ECB");
        cipherImpl.init(true, cip);
        Uint8List encrypted = cipherImpl.process(dataList);
        print("encrypted data: " + encrypted.toString());
        }
}

Это приводит кследующее сообщение об ошибке:

I/flutter (55555): The following assertion was thrown while handling a gesture:
I/flutter (55555): type 'PaddedBlockCipherParameters<KeyParameter, Null>' is not a subtype of type 'KeyParameter' of 'params'

К сожалению, информации о том, как использовать PointyCastle, не так много.Может быть, есть лучший способ сделать то, что я хочу?

1 Ответ

0 голосов
/ 20 февраля 2019

Вам не нужно PaddedBlockCipherParameters, поскольку вы не используете мягкий шифр.

Попробуйте:

import 'dart:typed_data';

import 'package:pointycastle/api.dart';
import 'package:pointycastle/block/aes_fast.dart';
import 'package:pointycastle/block/modes/ecb.dart';

main() {
  Uint8List key = Uint8List.fromList(
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
  );

  Uint8List plainText = Uint8List.fromList(
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
  );

  BlockCipher cipher = ECBBlockCipher(AESFastEngine());

  cipher.init(
    true,
    KeyParameter(key),
  );
  Uint8List cipherText = cipher.process(plainText);
}
...