Пакет encrypt
не поддерживается в хорошем состоянии, поэтому используйте пакет pointy castle
.(Используйте pointycastle: ^1.0.0-rc3
.)
Ваш вопрос не ясен о том, как вы собираетесь:
- получить материал ключа из предоставленных строк
- convertтекст в байтах
- преобразует зашифрованный текст обратно во что-то, что вы можете включить в json
Возможно, они могут быть закодированы в шестнадцатеричном или base64 формате.Ваша серверная команда должна иметь возможность указать, что они хотят.
Вот пример кода для шифрования в AES / CBC / PKCS7.
import 'dart:convert';
import 'dart:typed_data';
import 'package:pointycastle/api.dart';
import 'package:pointycastle/padded_block_cipher/padded_block_cipher_impl.dart';
import 'package:pointycastle/paddings/pkcs7.dart';
import 'package:pointycastle/block/aes_fast.dart';
import 'package:pointycastle/block/modes/cbc.dart';
main() {
//final key = 'dxxxxxxxxxxeX';
//final iv = '_Vxxxxxxxxxx1';
// TODO - convert the key and IV to bytes
// dummy key and IV values
Uint8List key = Uint8List.fromList(
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
);
Uint8List iv = Uint8List.fromList(
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
);
// TODO - convert the plaintext to bytes
// example - just utf8 encode it
Uint8List plainText = Uint8List.fromList(utf8.encode('some plain text'));
PaddedBlockCipher cipher = PaddedBlockCipherImpl(
PKCS7Padding(),
CBCBlockCipher(AESFastEngine()),
);
cipher.init(
true,
PaddedBlockCipherParameters<CipherParameters, CipherParameters>(
ParametersWithIV<KeyParameter>(KeyParameter(key), iv),
null,
),
);
Uint8List cipherText = cipher.process(plainText);
// TODO - convert the cipher text to a String to include as the 'Request' param
}
PS Не забывайте, что повторное использование небезопасноодин и тот же IV более одного раза.