Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

150
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda