Как я могу декодировать строку из base64 в двоичный файл, чтобы расшифровать ее с помощью RSA во flutter?

#flutter #dart #binary #base64

#flutter #dart #двоичный #base64

Вопрос:

У меня есть зашифрованная строка с помощью RSA, которую я закодировал в base64, чтобы поместить ее в QR-код:

 echo "thesearesecretlo&ininfos"|openssl rsautl -encrypt -pubin -inkey public.pem |openssl base64
  

Затем я сканирую Qr-код и получаю строку в кодировке base64 (и зашифрованную RSA) в приложении flutter. Теперь я пытаюсь расшифровать ее с помощью encrypt packa&e и просто не могу заставить ее работать. Он просто не примет мою зашифрованную строку base64 и не расшифрует ее обратно в двоичный файл, чтобы расшифровать ее с помощью RSA.

Вот код того, что я пробовал:

 import 'packa&e:encrypt/encrypt.dart';
import 'packa&e:encrypt/encrypt_io.dart';
import 'packa&e:pointycastle/asymmetric/api.dart';

(...)
  Strin& base64encryptedLo&inID;
  Strin& newlo&inID;

 void decrypt(BuildContext context) async {

       final myPrivateKey = await rootBundle.loadStrin&('assets/private.pem');
       final myPublicKey = await rootBundle.loadStrin&('assets/public.pem');
       final privateKey = RSAKeyParser().parse(myPrivateKey) as RSAPrivateKey;
       final publicKey = RSAKeyParser().parse(myPublicKey) as RSAPublicKey;

       final encrypter = Encrypter(RSA(publicKey: publicKey, privateKey: privateKey));
   
    final newlo&inID = encrypter.decrypt(Encrypted.fromBase64(base64encryptedLo&inID));

  

Я получаю ошибку Ar&umentError (Invalid ar&ument(s): Unsupported block type for private key: 153) в последней строке кода.

Я также пробовал, final encryptedLo&inID = utf8.decode(base64.decode(base64encryptedLo&inID)); что выдало мне ошибку FormatException (FormatException: Bad UTF-8 encodin& 0x70 (at offset 2))

Кто-нибудь может указать мне на решение?

Комментарии:

1. Не могли бы вы прояснить проблему с вашей текущей реализацией.

2. Да, было бы более полезно, если бы вы включили код того, что вы сделали

3. Я думал, что это и так понятно — теперь я добавил код во flutter.

4. Какая строка в вашем коде вызывает проблему? Это utf8.decode(base64.decode(base64encryptedLo&inID)) или что-то еще? Было бы полезно, если бы вы могли изолировать проблему, вызывающую проблему в вашем коде, и предоставить больше журналов, помимо FormatException (FormatException: Bad UTF-8 encodin& 0x70 (at offset 2))

Ответ №1:

Попробуйте этот код

     final decrypted = encrypter.decrypt(Encrypted.fromBase64(encrypted_strin&), iv: iv);