Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

143
Views
La biblioteca de "cifrado" de Dart proporciona una cadena ilegible después del cifrado

Me estoy mudando de React Native a Flutter/Dart. Tengo el siguiente fragmento de código del mecanografiado de React Native:

 import CryptoJS from 'crypto-js'; export const decryptSessionKey = (randomKey: string, cipher: string) => { const iv = randomKey ? randomKey.slice(0, 16) : ''; const decrypted = CryptoJS.AES.decrypt( cipher, CryptoJS.enc.Utf8.parse(randomKey), { iv: CryptoJS.enc.Utf8.parse(iv), mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding, }, ); return decrypted.toString(CryptoJS.enc.Utf8); };

Y moví ese código a flutter/dart como:

 import 'dart:math'; import 'package:encrypt/encrypt.dart'; String decryptSessionKey(String randomKey, String cipher) { final encrypter = Encrypter(AES(Key.fromUtf8(randomKey), mode: AESMode.ctr, padding: null)); var iv = randomKey.substring(0, 16); final decrypted = encrypter.decrypt(Encrypted.fromUtf8(cipher), iv: IV.fromUtf8(iv)); return decrypted.toString(); }

Dada la clave aleatoria como 0QaOUmxpugtnRUTZ6yOSxQeZq47Akiqf y el cifrado como piMgUF2ISUl/g7ns2/gZyaWQm6Rdv7x500GD7lMLYxhy14Tg+Bizibvz . Obtendría el descifrado en Typescript como 54387c3b38150d2a7a1c545167736e701629382648 .

Sin embargo, en Flutter, obtuve una cadena ilegible como ��ʋ�ͻh�0�M��R�Z���YInCXTI*��!�\��-S�f��/�SU��'

¿Se me escapa algo? ¡Gracias de antemano!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

En el código Dart, el texto cifrado debe estar decodificado en Base64 y no codificado en UTF8:

 final decrypted = encrypter.decrypt(Encrypted.from64(cipher), iv: IV.fromUtf8(iv)); // fromBase64() works also

Esto no es necesario en el código JavaScript, donde CryptoJS.AES.decrypt() convierte implícitamente el texto cifrado codificado en Base64 en un objeto CipherParams .

Si esto se soluciona, ¡el descifrado funciona!

Tenga en cuenta la siguiente vulnerabilidad: en ambos códigos, los primeros 16 bytes de la clave de 32 bytes también se utilizan como IV. Si se aplica la misma clave varias veces, automáticamente se repiten los pares clave/IV. Especialmente para CRT, esto es inseguro, consulte ¿Por qué no se deben reutilizar IV/pares de claves en el modo CTR?
Por lo general, se genera un IV aleatorio para cada cifrado. El IV no es secreto y se envía junto con el texto cifrado (típicamente concatenado). En el lado de descifrado, el IV se quita y se usa para descifrar.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!